クロスオリジン画像リソース権限(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 レコードを挿入する詳細な例

推薦する

WeChatアプレットでラッキーホイールゲームを実装する方法

ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...

MySQL アーキテクチャのナレッジポイントの概要

1. データベースとデータベースインスタンスMySQL の研究では、データベースとデータベース イン...

Centos7サーバーの基本的なセキュリティ設定手順

pingスキャンをオフにする(役に立たないが)まずルートに切り替えるエコー 1 > /proc...

Vue ルーティング this.route.push ジャンプ ページが更新されない場合の解決策

Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...

CSS スティッキーフッター実装コード

この記事では、CSS スティッキー フッターの実装コードを紹介し、共有します。詳細は次のとおりです。...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...

NODE.JS を使用して WEBSERVER を作成する手順

目次Node.jsとはNodeJSをインストールするNode を使用して Hello World を...

MySQL でのトリガーとカーソルの紹介と使用

トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデ...

docker compose helloworld を使い始めるための詳細なプロセス

前提条件Compose は、Docker コンテナをオーケストレーションするためのツールです。Doc...

MySQLアラームの詳細な分析と処理

最近、あるサービスにアラームが発生し、耐えられなくなっています。アラーム情報は次のとおりです。メトリ...

RedisとMySQLの違いを簡単に説明してください

MySQL はディスクに保存される永続的なストレージであり、取得には一定の IO が伴うことはご存じ...

Tomcatディレクトリ構造の詳細な説明

目次ディレクトリ構造binディレクトリconfディレクトリlibディレクトリwebapps ディレク...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

LeetCode の SQL 実装 (184. 部門内で最も高い給与)

[LeetCode] 184. 部門最高給与従業員テーブルにはすべての従業員が保存されます。すべて...

Linux statコマンドの使用

1. コマンドの紹介stat コマンドは、ファイルまたはファイル システムに関する詳細情報を表示する...