クロスオリジン画像リソース権限(CORS 対応画像)

クロスオリジン画像リソース権限(CORS 対応画像)

HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 CORS を設定することで、img 画像を他のサイトから読み込み、現在のサイト (現在のオリジン) から直接ダウンロードしたかのようにキャンバスで使用できるようになります。

crossorigin 属性の使用の詳細については、CORS 設定属性を参照してください。

「汚染された」キャンバスとは何ですか?

CORS 認証なしでキャンバス内の画像を使用することは可能ですが、そうするとキャンバスが汚染されます。 キャンバスが汚染されると、キャンバスからデータを抽出できなくなります。つまり、toBlob()、toDataURL()、getImageData() などのメソッドを呼び出すことができなくなり、セキュリティ エラーがスローされます。

これは実際には、ユーザーの個人情報を保護し、プライバシー漏洩の原因となるリモート Web サイトからユーザーの画像情報が許可なく読み込まれるのを防ぐためです。

(訳者注:ユーザーがQQなどのソーシャルネットワーキングサイトにログインしている場合、保護されていない場合、特定のWebサイトを開いた後、Webサイトがキャンバスを使用してユーザーの画像情報を取得してアップロードし、漏洩が発生する可能性があります。)

例: 他のサイトから画像を保存する

まず、イメージ サーバーは対応するAccess-Control-Allow-Origin応答ヘッダーを設定する必要があります。リクエスト ヘッダーに img 要素の crossOrigin 属性を追加します。たとえば、Apache サーバーの場合、HTML5 Boilerplate Apache サーバー構成内の構成情報をコピーして応答できます。

<IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
        SetEnvIf オリジン ":" IS_CORS
        ヘッダー設定 Access-Control-Allow-Origin "*" env=IS_CORS
    </ファイル一致>
    </モジュール>
</モジュール> 

これらの設定を有効にすると、独自のリソースと同様に、他のサイトの画像を DOM ストレージ (または他の場所) に保存できます。

var img = 新しい画像、
    キャンバス = document.createElement("キャンバス"),
    ctx = キャンバス.getContext("2d")、
    src = "http://example.com/image"; // 特定の画像アドレス img.crossOrigin = "Anonymous";

img.onload = 関数() {
    キャンバスの幅 = img の幅;
    キャンバスの高さ = img.height;
    ctx.drawImage(画像, 0, 0);
    localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
}
src = src;
// キャッシュされた画像もロードイベントをトリガーするようにします if ( img.complete || img.complete === undefined ) {
    img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
    src = src;
}

ブラウザの互換性

デスクトップ

特徴クロムFirefox (ヤモリ)インターネットエクスプローラーオペラサファリ
基本サポート13 8サポートなしサポートなし?

携帯

特徴アンドロイドFirefox モバイル (Gecko) IEモバイルOpera モバイルSafariモバイル
基本サポート? ? ? ? ?

参照

Chrome: WebGL でクロスオリジン画像を使用する

HTML 仕様 - crossorigin 属性

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  JavaScript のスプレッド演算子とレスト演算子の違いの詳細な説明

>>:  Quill エディタでカスタム HTML レコードを挿入する詳細な例

推薦する

Vue プロジェクトを実行するときに `--fix` オプションで修正できる可能性のある警告のエラー問題を解決します。

問題: vue-cil3 は、`--fix` オプションで修正できる可能性のある警告とともに実行され...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

MySQL 8.0.12 のインストールと設定のグラフィックチュートリアル

MySQL 8.0.12 のダウンロードとインストールのチュートリアルを録画し、全員と共有しました。...

MySQLデータベースのマスタースレーブレプリケーションと読み取り書き込み分離に関する詳細なチュートリアル

目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...

HTML タグ dl dt dd 使用方法

基本構造:コードをコピーコードは次のとおりです。 <ダウンロード> <dt>...

Vue の 4 つのカスタム命令の説明と使用例

4つの実用的なVueカスタム指示1. Vドラッグ要件: マウスドラッグ要素アイデア:要素のオフセット...

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

HTML <!--...--> コメントタグの役割の詳細な分析

多くのウェブサイトのソースコードを確認すると、多くのコメントが見つかります。特に、ソース文書にコメン...

Bootstrap5 ブレークポイントとコンテナの具体的な使用法

目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

JavaScript配列の重複排除のいくつかの方法についての詳細な説明

目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...

webpackでHMRを手動で実装するいくつかの方法

目次1. はじめに2. GitHub 3. 基本構成プロジェクトディレクトリパッケージ.json c...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

HTML マークアップ言語 - フォーム

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Tomcat は、Springboot プロジェクトの WAR パッケージの起動時にエラーを報告します: 子の起動時にエラーが発生しました

今日、会社の Springboot プロジェクトは、テストのためにテスト サーバーにデプロイする準備...