2

この質問はFirefox3.5の色補正ハックと密接な関係がありますか?

私の状況では、私のキャンバスゲームがあり、そこで使用される画像には、その形状や接続ポイントなどに関する追加情報が含まれています。この情報は、意味のある色(RGB(255,255など)を使用してPNG画像自体に保存されます。 、0)接続ポイントの場合)。

要素を読み込んでキャンバスにペイントすると、Imageオブジェクトが作成され、img.srcが設定され、img.load関数で、機密情報を読み取る画像データを前処理します(そして、キャンバスにペイントする前に画像データから機密ピクセルを削除します)。

問題:FFでは、255,255,0であるはずだったピクセルは実際には255,254,0です。FFの色補正に問題はありませんが(表示されている画像の色が正しいか、わずかに変更されているかは関係ありません)、画像データを取得すると未補正のデータが得られると思います。サーバー上のイメージを変更する必要のないソリューションを探しています。何か方法はありますか?例えば。img.setColorProfile()、またはimg.disableColorCorrection()、またはimg.getImageData(disableColorCorrection)またはimg.getImageData(colorProfile)?

4

1 に答える 1

1

この問題は、画像の描画よりも画像の読み込みに関係している可能性があります。

適切な解決策は、画像からカラープロファイル情報を取り除くことだと思います(これはあなたが避けたいようです)。元のデータをそのままにする必要がない場合は、可能であればFirefox用の別の画像リソースをサーバーします。

http://f6design.com/journal/2006/12/01/fixing-png-gamma/

また、サーバーが連携していて、CORSとAJAXによる画像の読み込みが許可されている場合は、PNG画像を純粋なJavascriptでデコードできます。png.jsを使用してJavascriptで画像をデコードし、<canvas>(ではなく)画像データからソースを作成します<img>。このようにして、各PNGピクセルからどのRGB値が出力されるかを制御できます。

https://github.com/devongovett/png.js

于 2012-10-06T10:24:38.450 に答える