首页 > 解决方案 > 这个库可以检测 JPG 是 RGB 还是 CMYK 格式?

问题描述

感谢元数据提取器库,它真的很有帮助。它提供了我需要的所有信息,除了 JPG 是 RGB 还是 CMYK 格式。那里有信息,我只是没有看到它,还是这个库没有返回这个属性?

谢谢

标签: metadata-extractor

解决方案


从这个关于 Java ImageIO 包的文档:

https://docs.oracle.com/javase/7/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html

读取时,流的内容由通常的 JPEG 约定解释,如下所示:

  • 如果存在 JFIF APP0 标记段,则已知颜色空间是灰度或 YCbCr。如果还存在包含嵌入式 ICC 配置文件的 APP2 标记段,则根据 JFIF 规范中给出的公式将 YCbCr 转换为 RGB,并假设 ICC 配置文件引用生成的 RGB 空间。

  • 如果存在 Adob​​e APP14 标记段,则通过查询变换标志来确定颜色空间。转换标志采用以下三个值之一:

    • 2 - 图像编码为 YCCK(在编码时从 CMYK 隐式转换)。
    • 1 - 图像被编码为 YCbCr(在编码时从 RGB 隐式转换)。
    • 0 - 未知。3 通道图像假定为 RGB,4 通道图像假定为 CMYK。
  • 如果两个标记段都不存在,则遵循以下过程:假定单通道图像是灰度的,并且假定 2 通道图像是具有 alpha 通道的灰度。对于 3 通道和 4 通道图像,请查阅组件 ID。如果 3 通道图像的这些值为 1-3,则图像被假定为 YCbCr。根据上述可选颜色空间支持的可用性,如果 4 通道图像的这些值为 1-4,则假定图像为 YCbCrA。如果这些值 > 4,则根据 'R'、'G'、'B'、'A'、'C'、'c' 的 ASCII 代码检查它们。这些可以编码以下颜色空间:

    • RGB
    • RGBA
    • YCC (as 'Y','C','c'),假设为 PhotoYCC
    • YCCA (as 'Y','C','c','A'),假设为 PhotoYCCA

否则,假设 3 通道二次采样图像为 YCbCr,假设 3 通道非二次采样图像为 RGB,假设 4 通道二次采样图像为 YCCK,假设 4 通道非二次采样图像为CMYK。

所有其他图像都被声明为无法解释。

Metadata Extractor 不执行这些转换,但上述方法提供了一个经过测试的示例,说明您可以采取哪些步骤来确定颜色格式。


推荐阅读