【问题标题】:GraphicsMagic is unable to identify background transparency of PDFGraphicsMagick 无法识别 PDF 的背景透明度
【发布时间】:2014-09-01 10:09:45
【问题描述】:

GM 无法识别 PDF 的背景透明度,使用“gm convert”创建的 PNG 获得白色背景,而同一 PDF 被 IM 转换为具有透明背景的 PNG。

$convert -verbose /var/tmp/abc.pdf /var/tmp/abc.png
/var/tmp/magick-16370Tq7WYv5U54Pa1 PNG 288x720 288x720+0+0 8 位 sRGB 20.7KB 0.000u 0:00.009
/var/tmp/abc.pdf PDF 288x720 288x720+0+0 16 位 sRGB 20.7KB 0.000u 0:00.000
/var/tmp/abc.pdf=>/var/tmp/abc.png PDF 288x720 288x720+0+0 8 位 sRGB 17c 16.6KB 0.010u 0:00.009
[ghostscript 库] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" "-sOutputFile= /var/tmp/magick-16370Tq7WYv5U54Pa%d" "-f/var/tmp/magick-16370CVWmPbzBmjpF" "-f/var/tmp/magick-16370khy6Y-G3TgtO"
$gm convert -verbose /var/tmp/abc.pdf /var/tmp/abc.png
gm 转换:“gs”“-q”“-dBATCH”“-dMaxBitmap=50000000”“-dNOPAUSE”“-sDEVICE=pnmraw”“-dTextAlphaBits=4”“-dGraphicsAlphaBits=4”“-r72x72”“ -sOutputFile=/var/folders/6d/n_hv45rs1jv17nxwfjwj776cspn_3c/T/gmoCp6rG""--""/var/folders/6d/n_hv45rs1jv17nxwfjwj776cspn_3c/T/gmBEgWnK""-c""退出"。
/var/tmp/abc.pdf PDF 288x720+0+0 DirectClass 8 位 607.6K 0.000u 0:01
/var/tmp/abc.pdf=>/var/tmp/abc.png PNG 288x720+0+0 DirectClass 8 位 0.000u 0:01
经过进一步调查,IM 的“识别”似乎可以正确识别 PDF 中的背景,而 GM 的“gm 识别”则不能。
$identify -verbose abc.pdf
图片:abc.pdf
格式:PDF(便携式文档格式)
类型:双层
色彩空间:灰色
深度:16/4 位
通道深度:
灰色:1 位
阿尔法:4位
阿尔法:graya(255,0)#FFFFFFFFFFFF0000
颜色:16
背景颜色:graya(255,1)
透明色:graya(0,0)
版本:ImageMagick 6.8.9-1 Q16 x86_64 2014-07-01 http://www.imagemagick.org
$gm identify -verbose abc.pdf
gm 识别:“gs”“-q”“-dBATCH”“-dMaxBitmap=50000000”“-dNOPAUSE”“-sDEVICE=pnmraw”“-dTextAlphaBits=4”“-dGraphicsAlphaBits=4”“-r72x72”“ -sOutputFile=/var/folders/6d/n_hv45rs1jv17nxwfjwj776cspn_3c/T/gmzhBEIk""--""/var/folders/6d/n_hv45rs1jv17nxwfjwj776cspn_3c/T/gmAPm2Po""-c""退出"。
图片:abc.pdf
格式:PDF(便携式文档格式)
类型:灰度
深度:每像素 4 位分量
渠道深度:
灰色:4 位
背景颜色:白色
评论:GPL Ghostscript 生成的图像(device=pnmraw)
签名:215f1c08ec575526ce398d193c4df22faaea100c10255e0db747641bdaaeac49
污染:错误

【问题讨论】:

标签: pdf png ghostscript graphicsmagick


【解决方案1】:

您的 (ImageMagick) convert 和您的 (GraphicsMagick) gm convert 命令产生不同输出的原因是:

  1. 这两个实用程序能够直接处理 PDF 输入文件,都只能处理评估图像格式。

  2. 为了处理 PDF 输入文件,这两个实用程序都求助于 'delegate' 程序:在这两种情况下,这都是 Ghostscript(CAN 处理 PDF 输入文件)。

  3. 然而,这两个实用程序都使用 不同 'delegate command lines'(可以在引用的 -verbose 命令行输出中直接看到:

    我。 convert 使用作为其 Ghostscript 输出设备 pngalpha

    二。 gm convertemploys 作为其 Ghostscript 输出设备 pnmraw.

  4. 然后,两个实用程序都将其委托命令的输出处理为最终(光栅)格式文件。

问题是:光栅格式 'pnmraw' 不支持透明度(alpha 通道),但 'pngalpha' 支持。因此,首先将 PDF 输入转换为 pnmraw 的实用程序丢失了透明页面背景,并用(不透明)白色背景替换了它们。

除非您修改 GraphicsMagick 设置以使其在其委托命令中使用 pngalpha(与 ImageMagick 使用的相同),否则您的 gm convert 将不会显示透明背景。

【讨论】:

    【解决方案2】:

    只是想添加到Kurt Pfeifle 答案,因为它为我指出了这个解决方案。他所指的配置可在 delegates.mgk 文件 (graphicsmagick/1.3.19_1/lib/GraphicsMagick/config) 中找到。

    对我来说,问题是这一行:

    <!-- Read color Postscript, EPS, and PDF  -->
    <delegate decode="gs-color" stealth="True" command='"gs" -q -dBATCH -dMaxBitmap=50000000 -dNOPAUSE -sDEVICE=ppmraw -dTextAlphaBits=%u -dGraphicsAlphaBits=%u -r%s %s "-sOutputFile=%s" -- "%s" -c quit' />
    

    我改成:

      <delegate decode="gs-color+alpha" stealth="True" command='"gs" -q -dBATCH -dMaxBitmap=50000000 -dNOPAUSE -sDEVICE=pngalpha -dTextAlphaBits=%u -dGraphicsAlphaBits=%u -r%s %s "-sOutputFile=%s" -- "%s" -c quit' />
    

    而且我的 png 会带有透明背景!

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2021-07-03
      • 2014-01-14
      • 2022-01-23
      • 2018-01-07
      • 2018-02-12
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多