问题描述
假设我创建了一个简单的 PNG:
convert -size 1x1 canvas:red red.png
这是一张类似的图片(更大尺寸)供参考:
然后在其上运行命令 identify
。它告诉我图像的 ColorSpace 是 sRGB
,但文件中似乎没有这方面的指示。事实上运行
$ hexdump -C red.png
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 00 01 00 00 00 01 01 03 00 00 00 25 db 56 |.............%.V|
00000020 ca 00 00 00 04 67 41 4d 41 00 00 b1 8f 0b fc 61 |.....gAMA......a|
00000030 05 00 00 00 20 63 48 52 4d 00 00 7a 26 00 00 80 |.... cHRM..z&...|
00000040 84 00 00 fa 00 00 00 80 e8 00 00 75 30 00 00 ea |...........u0...|
00000050 60 00 00 3a 98 00 00 17 70 9c ba 51 3c 00 00 00 |`..:....p..Q<...|
00000060 06 50 4c 54 45 ff 00 00 ff ff ff 41 1d 34 11 00 |.pltE......A.4..|
00000070 00 00 01 62 4b 47 44 01 ff 02 2d de 00 00 00 07 |...bKGD...-.....|
00000080 74 49 4d 45 07 e5 01 0d 17 04 37 80 ef 04 02 00 |tIME......7.....|
00000090 00 00 0a 49 44 41 54 08 d7 63 60 00 00 00 02 00 |...IDAT..c`.....|
000000a0 01 e2 21 bc 33 00 00 00 25 74 45 58 74 64 61 74 |..!.3...%tEXtdat|
000000b0 65 3a 63 72 65 61 74 65 00 32 30 32 31 2d 30 31 |e:create.2021-01|
000000c0 2d 31 33 54 32 33 3a 30 34 3a 35 35 2b 30 30 3a |-13T23:04:55+00:|
000000d0 30 30 2d af d4 01 00 00 00 25 74 45 58 74 64 61 |00-......%tEXtda|
000000e0 74 65 3a 6d 6f 64 69 66 79 00 32 30 32 31 2d 30 |te:modify.2021-0|
000000f0 31 2d 31 33 54 32 33 3a 30 34 3a 35 35 2b 30 30 |1-13T23:04:55+00|
00000100 3a 30 30 5c f2 6c bd 00 00 00 00 49 45 4e 44 ae |:00\.l.....IEND.|
00000110 42 60 82 |B`.|
00000113
没有提供我知道的线索。
我了解识别不包含该信息的图像的 ColorSpace 是一个非常困难的问题 - 请参阅查看颜色直方图 here 的一个建议解决方案。
那么来自 ImageMagick 套件的 identify
如何确定此图像的色彩空间?
解决方法
假设没有嵌入或 sidecar ICC 配置文件或没有明确编码描述的图像根据 IEC 61966-2-1:1999 进行编码,即 sRGB规范。
,这只是 ImageMagick 中的一个错误。您可以使用 exiftool 检查是否存在 sRGB + sRGB 意图块。在这种情况下,没有。
Gamma 2.2 不是 sRGB。因此 ImageMagic 在这里是错误的。这是维基百科上的一个常见问题,所有 SVG 图像在转换为 PNG 时都有这个问题,它会破坏颜色。请参阅:https://phabricator.wikimedia.org/T26768
我们将不得不重新编码维基百科上的所有图像,因为我们使用 ImageMagick。叹气。