我通常非常重视 ImageMagick - 但不要相信convert
使用您正在使用的命令正确计算颜色......
我可以建议一种不同的方法来发现 PDF 页面是否使用颜色?它基于一个(相对较新的)Ghostscript 设备,称为inkcov
(您需要 Ghostscript v9.05 或更高版本)。它显示每个页面的 CMYK 墨水覆盖率(对于 RGB 颜色,它在内部进行到 CMYK 的静默转换)。
首先,在 Ghostscript 的帮助下生成一个示例 PDF:
gs \
-o test.pdf \
-sDEVICE=pdfwrite \
-g5950x2105 \
-c "/F1 {100 100 moveto /Helvetica findfont 42 scalefont setfont} def" \
-c "F1 (100% 'pure' black) show showpage" \
-c "F1 .5 .5 .5 setrgbcolor (50% 'rich' rgbgray) show showpage" \
-c "F1 .5 .5 .5 0 setcmykcolor (50% 'rich' cmykgray) show showpage" \
-c "F1 .5 setgray (50% 'pure' gray) show showpage"
尽管在人眼看来,所有页面都没有使用任何颜色,但第 2 页和第 3 页确实将它们的明显灰度值与颜色混合在一起。
现在检查每一页的墨水覆盖率:
gs -o - -sDEVICE=inkcov test.pdf
[...]
Page 1
0.00000 0.00000 0.00000 0.02230 CMYK OK
Page 2
0.02360 0.02360 0.02360 0.02360 CMYK OK
Page 3
0.02525 0.02525 0.02525 0.00000 CMYK OK
Page 4
0.00000 0.00000 0.00000 0.01982 CMYK OK
(值 1.00000 对应于相应颜色通道的 100% 墨水覆盖率。因此0.02230
,在结果的第一行中2.23 %
,页面区域被黑色墨水覆盖。)因此 Ghostscript 给出的结果inkcov
正是预期的结果:
- 第 1 + 4 页不使用任何 C(青色)、M(洋红色)、Y(黄色)颜色,而仅使用 K(黑色)。
- 第 2 + 3 页确实使用 C(青色)、M(洋红色)、Y(黄色)颜色的墨水,但根本没有使用 K(黑色)。
现在让我们转换原始 PDF 的所有页面以使用DeviceGray
颜色空间:
gs \
-o temp.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-sProcessColorModel=DeviceGray \
test.pdf
...并再次检查墨水覆盖率:
gs -q -o - -sDEVICE=inkcov temp.pdf
0.00000 0.00000 0.00000 0.02230 CMYK OK
0.00000 0.00000 0.00000 0.02360 CMYK OK
0.00000 0.00000 0.00000 0.02525 CMYK OK
0.00000 0.00000 0.00000 0.01982 CMYK OK
同样,在颜色转换成功的情况下,这正是预期的结果!(顺便说一句,你的convert
命令2
为我返回了两个文件,[原始]test.pdf
和 [灰色转换]temp.pdf
- 所以这个命令不可能是正确的......)