gpt4 book ai didi

pdf - Ghostscript灰度转换仍然包含颜色?

转载 作者:行者123 更新时间:2023-12-04 15:11:33 25 4
gpt4 key购买 nike

如果它确实包含颜色,我需要将 pdf 转换为灰度。
为此,我找到了一个脚本,可以确定 pdf 是否已经是灰度的。

convert "source.pdf" -colorspace RGB -unique-colors txt:- 2> /dev/null \
| egrep -m 2 -v "#([0-9|A-F][0-9|A-F])\1{3}" \
| wc -l

这会计算文档中存在多少具有不同 RGB 值的颜色(因此它们不是灰色)。

如果 pdf 还不是灰度文档,我将使用 ghostscript 进行转换
gs \
-sOutputFile=temp.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
source.pdf < /dev/null

如果我使用 PDF 查看器打开输出文档,它会正确显示没有颜色。但是如果我在新生成的文档上尝试第一个脚本,结果它仍然包含一些颜色。如何将文档转换为精确的灰度?我需要这个,因为如果我用彩色打印机打印这个文档,打印机将使用颜色而不是黑色打印灰色。

最佳答案

我非常重视 ImageMagick——但不要相信 convert 会用你正在使用的命令正确计算颜色......

我可以建议一种不同的方法来发现 PDF 页面是否使用颜色吗?它基于名为 inkcov 的(相对较新的)Ghostscript 设备(您需要 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 映射到相应颜色 channel 的 100% 墨水覆盖率。因此,结果第一行中的 0.02230 表示页面区域的 2.23 % 被黑色墨水覆盖。)因此,Ghostscript 的 inkcov 给出的结果正是预期的一:
  • pages 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 - 所以这个命令不可能是正确的......)

    关于pdf - Ghostscript灰度转换仍然包含颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474234/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com