JPEG中的颜色配置文件检测

6
我希望能够检测JPEG中的颜色配置文件。明确一点:我并不想实际进行颜色校正或进行其他任何操作。
我进行了一些调查,但是我没有找到任何确定的信息来源。以下是我目前所知道的内容:
  • XMP块中有颜色配置文件信息。XMP块位于0xFFE1 JPEG部分中(与EXIF相同)。该部分的标记后跟字符串http://ns.adobe.com/xap/1.0/。但是,当我去除了这个部分时,Photoshop仍然能够检测到颜色配置文件。

  • EXIF本身也有一个颜色空间标签(标签= 0xA001)。在EXIF规范中仅定义了一个值:1 = sRGB。我注意到,在我的图像中,它取值为0xFFFF,表示未校准。因此,不是这个标签。

  • 我用一张图片进行了实验,将其保存在两种不同的颜色配置文件中,除了XMP和EXIF的更改外,我还注意到可能有一个全新的JPEG部分。它以0xFFE2开头,其标记后跟字符串ICC_PROFILE。这似乎是最有可能的情况。

有没有人在JPEG中管理颜色配置文件方面有经验?我认为EXIF和XMP中的信息只是元数据,重要的是ICC_PROFILE部分的存在。

1个回答

7
ICC配置文件存储在JPEG文件的应用程序段中。这些块用于让应用程序存储所需的任何数据,因此它们不是由JPEG规范强制执行的。换句话说,JPEG文件格式没有定义嵌入颜色配置文件的方法,您只是看到了实际操作的方式。
由于任何人都可以使用应用程序段来进行任何操作,因此您需要在确定它包含ICC配置文件之前识别和验证内容。
因此,有三种常见的提供ICC配置文件的方式:
- 通过将ICC配置文件嵌入到应用程序段02中,并以ICC_PROFILE\0x00\0x01\0x01为前缀进行标识。我目前不确定两个\0x01是否有任何意义,或者它们总是那样。在这14个字符之后,实际的ICC配置文件被存储。 - 通过将ICC配置文件嵌入到应用程序段01中的嵌入式EXIF元数据文件中。 - 通过将ICC配置文件嵌入到应用程序段01中的嵌入式XAM元数据文件中。这是以http://ns.adobe.com/xap/1.0/\0x00为前缀的。
我还没有找到任何具体的信息。如果ICC说“这就是做法”,那就太好了,但我还没有找到任何这样的信息。因此,据我所知,任何一种方法都可能被用作ICC配置文件,这将取决于应用程序是否加载配置文件。
应用程序段02似乎是常见的做法,但您想要检查的内容可能取决于您的用例。正如其他评论所示,一些HELIOS EtherShare软件有/曾经有自己的做法。(我还没有确认元数据中是否存在ICC配置文件,但我还没有认真看过,如果您能在实际情况中找到多个冲突的ICC配置文件的文件,那就不足为奇了。)

1
0x01、0x01是序列号。第一个是当前序列号,第二个字节是总数。这用于将ICC分割成多个APP2段(JPEG段大小的限制约为64 KB)。因此,基本上它表示1/1。 - t0rakka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接