代码之家  ›  专栏  ›  技术社区  ›  jrlocke

为什么使用imagemagick从该pdf渲染png会产生这些条纹瑕疵?

  •  3
  • jrlocke  · 技术社区  · 8 年前

    我正在运行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/

    这是我看到的输出,带有条纹状水平线瑕疵: app-icon

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

    3 回复  |  直到 8 年前
        1
  •  1
  •   Dave    8 年前

    我遇到了同样的问题,我认为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的代理。要强制的xml -D图形输卵管炎 到1。
    • 安装ghostscript 9.21,它似乎不受影响。
    • 按照上面的建议,在双维度上进行转换,然后缩小大小。
        2
  •  1
  •   jan-glx charlie    7 年前

    将ghostscript更新至9.23版本,并重新安装imagemagick。

        3
  •  0
  •   fmw42    8 年前

    使用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
    

    enter image description here

    我怀疑这是你的Ghostscript或libpng版本。尝试升级。

    推荐文章