我遇到了同样的问题,我认为 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,似乎不受影响。
- 按照上面的建议,以双倍尺寸转换,然后缩小尺寸。