感谢元数据提取器库,它真的很有帮助。它给了我所有我需要的信息,除了JPG是RGB还是CMYK格式。信息在那里吗?我只是没有看到它,还是这个库没有返回这个属性?
感谢
来自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空间。
如果存在Adobe APP14标记段,则通过查阅变换标志来确定颜色空间。转换标志采用三个值之一:
- 2-图像编码为YCCK(编码时隐式转换为CMYK(
- 1-图像被编码为YCbCr(在编码时从RGB隐式转换(
- 0-未知。假设3通道图像是RGB,假设4通道图像是CMYK
如果两个标记段都不存在,则执行以下过程:假设单通道图像为灰度级,假设双通道图像为带alpha通道的灰度级。对于3通道和4通道图像,将参考组件ID。如果这些值对于3通道图像是1-3,则假设该图像是YCbCr。根据上述可选颜色空间支持的可用性,如果这些值对于4通道图像是1-4,则假设图像是YCbCrA。如果这些值>4,则将根据ASCII代码中的"R"、"G"、"B"、"A"、"C"、"C"进行检查。这些可以对以下颜色空间进行编码:
- RGB
- RGBA
- YCC(如'Y','C','C'(,假定为PhotoYCC
- YCCA(如"Y"、"C"、"C"、"A"(,假定为PhotoYCCA
否则,假设3通道的二次采样图像为YCbCr,假设3信道的非二次采样的图像为RGB,假设4信道的二次取样图像为YCCK,并且假设4信道、非二次取样的图像为CMYK。
所有其他图像都被声明为无法解释。
Metadata Extractor不执行这些转换,但上面的方法提供了一个测试示例,说明了您可以采取哪些步骤来确定颜色格式。