解码JPEG文件时跨浏览器不兼容?

Isa*_*zag 7 jpeg cross-browser decoding

有些令我困惑的是 - 为什么这个图像在每个浏览器中都显得不同?

IE9(和Windows照片查看器)中的图像:
IE9中的图像

Firefox(和Photoshop)中的图像:
Firefox中的图片

Chrome中的图片(和Irfanview):
Chrome中的图片

JPEG的解码过程中发生了什么,使最终输出如此不同?

(在IE,Firefox,Chrome等中查看它,看看我的意思.)

小智 6

JPEGSnoop(源现在可用@ sourceforge)在我们进行Y'CbCr到RGB转换之前报告大亮度溢出.我在其他一些文件上得到这些错误,但溢出通常很小 - 256或257,最大值为255.这里计算的亮度为729!

JPEGSnoop的作者对YCC溢出的评论:

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...
Run Code Online (Sandbox Code Playgroud)


Ste*_*ger 2

JPEG 可以用 RGB 或 CMYK 进行编码。这些细节通常在 CMYK 时出现。在图像编辑程序中打开文件并将其另存为 RGB JPEG,然后向 CMYK 打印机致敬,它们现在将具有与您之前在浏览器中看到的不同结果。