我正在编写一个用于确定JPEG图像颜色空间的代码.我找到了两个可以帮助我实现这个的参考资料.一个是在oracle.com上,另一个是来自ijg.com的C源代码,"负责原始JPEG标准的参考实现".
但他们确实有所不同.例如,在没有Adobe标记的IJG中,有4个通道,它被假定为CMYK,但在oracle中它是YCCA.此外,IJG的实现并未考虑子采样,而对于4通道子采样,它在oracle规范中是YCCK,依此类推.
ColorSpace类中还有许多缺失,当我实现oracle的逻辑时,我需要指定3个额外的颜色空间,如YCCK,YCCA,RGBA.
另一点是,我发现信息JPEG不支持alpha通道透明度在这里,为什么会甲骨文谈论YCCA和RGBA在JPEG metadat说明书的背景下?
结果当用IJG的逻辑检查图像时,它告诉我它是CMYK(在ubuntu上用ImageMagick检查图像,它也说它是CMYK),用oracle的逻辑它是YCCA.谁相信?为什么oracle不依赖于原始的JPEG规范?或者还有其他我不知道的事情?
在对旧的JPEG标准设备发表评论后,我终于找到了答案。
关于ISO / IEC 10918-6:2013(E)第6.1节:
假设仅使用一种成分编码的图像是灰度数据,其中0为黑色,255为白色。
除非图像包含6.5.3中指定的APP14标记段,否则假定将用三部分编码的图像编码为YCbCr的RGB数据,在这种情况下,根据APP14标记的应用数据,将颜色编码视为RGB或YCbCr分割。RGB和YCbCr之间的关系如Rec.6中所定义。ITU-T T.871 | ISO / IEC 10918-5。
假设使用四个分量编码的图像为CMYK,其中(0,0,0,0)表示白色,除非图像包含6.5.3中指定的APP14标记段,在这种情况下,颜色编码被视为CMYK或YCCK根据APP14标记片段的应用数据。CMYK和YCCK之间的关系定义见第7节。
并且APP14标志为“ Adobe\0
”,AP12具有转换标志:
应支持转换标志值0、1和2,它们的解释如下:
0 – CMYK,用于用四个分量编码的图像,其中所有四个CMYK值都被补充;RGB,用于用三个分量编码的图像;也就是说,APP14标记未指定应用于图像数据的转换。
1 –使用YCbCr颜色编码以三个分量编码的图像。
2 –使用YCCK颜色编码以四个分量编码的图像。
因此,这取决于:应该为CMYK,但是如果APP14和AP12的值正确,则可能为YCCK。