何かが私を困惑させています-なぜこの画像はすべてのブラウザで異なって見えるのですか?
IE9(およびWindowsフォトビューアー)の画像:
Firefox(およびPhotoshop)の画像:
Chrome(およびIrfanview)の画像:
最終的な出力を大きく変えるために、JPEGのデコードプロセスで何が起こっているのでしょうか。
(IE、Firefox、Chromeなどで表示して、意味を確認してください。)
何かが私を困惑させています-なぜこの画像はすべてのブラウザで異なって見えるのですか?
IE9(およびWindowsフォトビューアー)の画像:
Firefox(およびPhotoshop)の画像:
Chrome(およびIrfanview)の画像:
最終的な出力を大きく変えるために、JPEGのデコードプロセスで何が起こっているのでしょうか。
(IE、Firefox、Chromeなどで表示して、意味を確認してください。)
JPEGSnoop (source now available @ sourceforge) は、Y'CbCr から RGB への変換に到達する前に、大きな輝度オーバーフローを報告します。他のいくつかのファイルでこれらのエラーが発生しますが、オーバーフローは通常小さく、256 または 257 対最大 255 です。ここで計算された輝度は 729 です!
YCC オーバーフローに関する JPEGSnoop の作成者のコメント:
DC での YCC クリッピング - 各 MCU は、前の MCU の DC (平均) 値を加算または減算します。これらはすべて 8 ビットの範囲内に収まる必要がありますが、DC 係数の破損により、この値が範囲外になることがあります。このタイプのエラーにより、画像の色や明るさが突然大幅に変化します。このタイプのエラーは通常回復しないため、JPEGsnoop はログ ファイルでこれらのうち最初の 10 件のみを報告します。
私は MCU 間 DC について詳しく知りませんでしたが、Pennebaker と Mitchelは同意見です。
*** Decoding SCAN Data ***
OFFSET: 0x00000160
Scan Decode Mode: Full IDCT (AC + DC)
Scan Data encountered marker 0xFFD9 @ 0x00027CA9.0
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 729, 109, 171) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 682, 109, 172) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 741, 109, 173) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 629, 109, 174) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 841, 109, 175) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 319, 109, 176) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 928, 109, 177) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 0, 0) YCC=( 624, 109, 177) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 1, 0) YCC=( 785, 107, 171) Y Overflow @ Offset 0x00027CA8.2
*** NOTE: YCC Clipped. MCU=( 1, 0) YCC=( 559, 107, 171) Y Overflow @ Offset 0x00027CA8.2
Only reported first 10 instances of this message...
JPEG は RGB または CMYK でエンコードできます。これらの問題は通常、CMYK の場合に発生します。画像編集プログラムでファイルを開き、RGB JPEG として保存し、CMYK プリンターに敬意を表します。これにより、ブラウザーで以前とは異なる結果が得られます。
私は推測しているだけです。
これらの違いを示すために画像が作成された場合、エンコードされたのは通常の画像ではなく、計算された色が 0 ~ 255 の範囲外であり、異なるデコーダーがこれらを異なる方法で処理する無効な画像である可能性があります。
たとえば、その特定の画像のカラー プロファイルを Photoshop で CMYK から sRGB に変更すると、すべてのブラウザでほぼ同じように表示されます。