背景:
エラーが発生しました。キャッチされない SecurityError: 'CanvasRenderingContext2D' で 'getImageData' の実行に失敗しました: クロスオリジン URL からの画像を含むキャンバス上で .getImageData() を使用すると、「キャンバスはクロスオリジン データによって汚染されています」というメッセージが表示されます。
問題:
画像のドメインが現在のドメインと異なるために「クロスオリジン」問題が発生します。このセキュリティ対策により、他のドメインからのリソースへの不正アクセスが防止されます。
解決策:
この問題を解決するには、画像のcrossOriginを設定することでキャンバスが汚染されるのを防ぐことができます。プロパティを "Anonymous" に設定します:
var img = new Image(); img.crossOrigin = "Anonymous"; // Prevents tainting img.src = "https://cross-origin-image.example.com/image.jpg";
サーバー側構成:
さらに、イメージをホストするリモート サーバーは次のヘッダーを設定する必要があります:
Access-Control-Allow-Origin: *
このヘッダーは、任意のオリジンからの画像へのアクセスを許可し、画像を汚さずにキャンバスにロードできるようにします。
例:
Dropbox ファイル選択機能は、「ダイレクト リンク」オプションを使用する場合、適切な CrossOrigin ヘッダーと Access-Control-Allow-Origin ヘッダーを設定します。これにより、JavaScript コードで Dropbox から画像を取得し、別のドメインのキャンバスで画像を操作できるようになります。
以上が記事の内容に適した質問ベースのタイトルをいくつか示します。 * クロスオリジン イメージで `getImageData()` を使用するときに発生する「Tainted Canvas」エラーを修正するにはどうすればよいですか? * `getImageD を使用できないのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。