我正在编写用于确定JPEG图像颜色空间的代码。我发现了两个可以帮助我实现这一目标的参考。一个在oracle.com上,另一个是ijg.com的C源代码,“负责原始JPEG标准的参考实现”。

但是它们确实有所不同。例如。在IJG中,当没有Adobe标记且有4个通道时,将其假定为CMYK,而在oracle中则为YCCA。同样,IJG的实现也不关注子采样,而对于4通道子采样,在Oracle规范中为YCCK,依此类推。

此外,在ColorSpace类中还存在许多缺失,当我实现oracle的逻辑时,我需要指定3个额外的颜色空间,例如YCCK,YCCA,RGBA。

还有一点是,我发现JPEG在alpha通道here中不支持透明的信息,为什么oracle在JPEG metadat规范的背景下谈论YCCA和RGBA?

结果,当用IJG的逻辑检查图像时,它告诉我它是CMYK(用ubuntu上的ImageMagick检查了图像,它也说它是CMYK),而Oracle的逻辑是YCCA。谁相信? oracle为什么不依赖原始的JPEG规范?或者还有其他我不知道的东西?

最佳答案

在对旧的JPEG标准设备发表评论之后,我终于找到了答案。

ISO/IEC 10918-6:2013 (E)的6.1节中:



假设仅使用一种成分编码的图像是灰度数据,其中0为黑色,255为白色。
除非有图像,否则假定使用三部分编码的图像是编码为YCbCr的RGB数据。
包含6.5.3中指定的APP14标记段,在这种情况下,应考虑颜色编码
根据APP14标记段的应用数据选择RGB还是YCbCr。关系
RGB和YCbCr之间的关系如Rec.6中所定义。 ITU-T T.871 | ISO / IEC 10918-5。
假设以四部分编码的图像为CMYK,其中(0,0,0,0)表示白色,除非
图像包含6.5.3中指定的APP14标记段,在这种情况下,颜色编码为
根据APP14标记片段的应用数据将CMYK或YCCK视为CMYK或YCCK。的
CMYK和YCCK之间的关系定义见第7节。



并且APP14标志为“ Adobe\0”,则AP12具有转换标志:


应支持转换标志值0、1和2,它们的解释如下:

0 – CMYK用于使用四个分量编码的图像,其中所有四个CMYK值均为
补充RGB,用于用三个分量编码的图像;即APP14标记不
指定应用于图像数据的变换。

1 –使用YCbCr颜色编码以三个分量编码的图像。

2 –使用YCCK颜色编码以四个分量编码的图像。


因此,这取决于:应该为CMYK,但是如果APP14和AP12具有正确的值,则可能为YCCK。

关于image - 确定JPEG的色彩空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50798014/

10-12 22:11