【问题标题】:Why does rendering a png from this pdf using imagemagick create these streaky artifacts?为什么使用 imagemagick 从此 pdf 渲染 png 会创建这些条纹伪影?
【发布时间】:2018-05-19 20:17:49
【问题描述】:

我正在运行 ghostscript 9.22、libpng 1.6.34 和 imagemagick 7.0.7-11 Q16

这里是复制问题的命令:

convert -density 400 icon.pdf -scale 1024x1024 ./appicon-1024x1024.png

这是输入 PDF 的链接: https://www.pdf-archive.com/2017/12/06/icon/

这是我看到的输出,带有条纹的水平线伪影:

有趣的是,关闭抗锯齿可以解决问题,但不适合我们的用例。

【问题讨论】:

  • 一种快速的解决方法(待审查代码)是在不进行抗锯齿的情况下转换为目标大小的 2 倍、4 倍或更多,然后使用抗锯齿调整其大小。

标签: pdf imagemagick png imagemagick-convert image-conversion


【解决方案1】:

我遇到了同样的问题,我认为 Ghostscript 9.22 是问题所在。我可以通过直接运行 Ghostscript 来重现该问题:

gs -dSTRICT -dDOINTERPOLATE -dNOPAUSE -dEPSCrop -dBATCH -sOutputFile=test.png -sDEVICE=pngalpha /path/to/broken.pdf

我还使用 Ghostscript 9.21 进行了测试,它可以按预期工作。

当 imagemagick 的 convert 命令与 +antialias 一起运行时,它会将不同的开关传递给 ghostscript。

您可以使用-verbose 开关告诉imagemagick 打印出它用来调用gs 的整个命令:

$ convert -verbose test.pdf test.png

产量:

'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pamcmyk32' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r72x72' -g1728x1728 -dEPSCrop ...

设置抗锯齿标志:

$ convert -verbose +antialias test.pdf test-with-antialias-flag.png

给我们:

'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 '-sDEVICE=pamcmyk32' -dTextAlphaBits=1 -dGraphicsAlphaBits=1 '-r72x72' -g1728x1728 -dEPSCrop

那里设置了几个不同的开关。基于一些直接运行gs 的实验,我发现-dGraphicsAlphaBits 似乎是罪魁祸首。如果将其设置为大于 1 的值,则这些行会出现在输出中。

因此有一些潜在的解决方法:

  • 编辑 imagemagick 的 delegates.xml 以强制 -dGraphicsAlphaBits 为 1。
  • 安装 ghostscript 9.21,似乎不受影响。
  • 按照上面的建议,以双倍尺寸转换,然后缩小尺寸。

【讨论】:

  • 无论是编辑 delegates.xml 还是使用 +antialising 进行转换都没有让我摆脱条纹。
【解决方案2】:

将 ghostscript 更新到 9.23 版并重新安装 imagemagick。

【讨论】:

    【解决方案3】:

    这个命令对我使用 ImageMagick 6.9.9.25 Q16 Mac OSX 和 Ghostscript 9.21 和 libpng @1.6.30_0 非常有效。

    convert -density 400 icon.pdf -scale 1024x1024 test.png
    

    我怀疑它是您的 Ghostscript 或 libpng 版本。尝试升级。

    【讨论】:

    • 我正在运行 ghostscript 9.22、libpng 1.6.34 和 imagemagick 7.0.7-11 Q16,所有这些都在您的工作版本之前。
    • 我尝试使用 IM 7.0.7.13 Q16 Mac OSX Sierra 和 Ghostscript 9.21 和 libpng @1.6.30_0,但它对我来说仍然可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多