[解決済み] 画像の特定のピクセルが透明であるかどうかを確認するにはどうすればよいですか?
2022-05-25 23:55:52
質問
PNG 画像の選択された (x,y) 点が透明であるかどうかを確認する方法はありますか?
どのように解決するのですか?
Jeffの回答に基づいて、あなたの最初のステップは、PNGのキャンバス表現を作成することです。 以下では、画像と同じ幅と高さの画面外のキャンバスを作成し、その上に画像を描画しています。
var img = document.getElementById('my-image');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
その後、ユーザがクリックしたときに
event.offsetX
と
event.offsetY
で位置を取得します。 これを利用して、ピクセルを取得することができます。
var pixelData = canvas.getContext('2d').getImageData(event.offsetX, event.offsetY, 1, 1).data;
1 つのピクセルしか取得しないため、pixelData はピクセルの R、G、B、および A の値を含む 4 つのエントリの配列になります。 アルファについては、255 より小さいものは何らかのレベルの透明度を表し、0 は完全に透明です。
以下はjsFiddleの例です。 http://jsfiddle.net/thirtydot/9SEMf/869/ このすべてにおいて、便宜上jQueryを使用しましたが、決して必要なものではありません。
注意してください。
getImageData
はデータ漏洩を防ぐためにブラウザの同一生成元ポリシーに該当します。つまり、他のドメインからの画像や(私はそう信じていますが、一部のブラウザはこれを解決しているかもしれません)任意のドメインからの SVG で canvas を汚した場合、このテクニックは失敗することを意味します。 これは、ログインしているユーザーに対してカスタム画像アセットを提供し、攻撃者がその画像を読み込んで情報を取得しようとするようなケースから保護するためのものです。 同じサーバから画像を提供するか、あるいは
クロスオリジンリソース共有
.
関連
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jQueryのコピーオブジェクトの説明
-
vueディレクティブv-bindの使用と注意点
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。