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

推薦する

Docker 経由で Redis 6.x クラスターをデプロイする方法

システム環境: Redis バージョン: 6.0.8 Docker バージョン: 19.03.12シ...

Vueはページング機能を実装する

この記事の例では、ページング機能を実装するためのVueの具体的なコードを参考までに共有しています。具...

axiosのシンプルなカプセル化と使用例コード

序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化...

レスポンシブウェブデザインを実現するためにIEでCSS3メディアクエリをサポートする

今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...

Linux での JDK のインストール (OpenJDK のアンインストールを含む) の概要

1. openjdkを表示する rpm -qa|grep jdk 2. openjdk を削除します...

VUE 3 テレポート コンポーネントと使用構文をすぐに使い始める

目次1. テレポートの紹介1.1. 複数のテレポートを使用する2. テレポートを使用する理由3. テ...

MySQL データ定義言語 DDL の基本ステートメント

MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...

Windows および Linux での Redis のインストールとデーモン設定

# Windows および Linux 上の Redis のインストール デーモン構成Redis の...

アイデアを war パッケージにパッケージ化し、tomcat にデプロイしてアクセス パスの問題 (図とテキスト)

Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...

Alibaba Cloud ServerにMySQLデータベースをインストールする方法の詳細な説明

序文学習中に Zookeeper をインストールする必要があったため、仮想マシンに常に問題が発生した...

docker のインストールが完了し、bridge-nf-call-iptables が無効であると報告される問題を解決します

Centos マシンで docker のインストールが完了したら、docker info コマンドを...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

DockerでJavaプログラムを起動する方法

シンプルなSpring Boot Webプロジェクトを作成するアイデア ツールを使用して、Sprin...

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...