将ImageMagick版本升级到6.7.8后,ImageMagick将pdf转换为jpeg的文本质量很差

时间:2013-04-02 16:42:55

标签: imagemagick imagemagick-convert pdf-conversion

升级ImageMagick文字质量在将pdf转换为jpeg后降级了:

旧图片 enter image description here

新图片 enter image description here 转换命令:convert foo.pdf foo.jpeg

旧的ImageMagick版本:

[root@home]#  convert -version
Version: ImageMagick 6.2.8 05/07/12 Q16 file:/usr/share/ImageMagick-6.2.8/doc/index.html
Copyright: Copyright (C) 1999-2006 ImageMagick Studio LLC

生成的文件大小:

-rw-r--r-- 1 root root 139K Apr  2 16:11 foo-0.jpeg
-rw-r--r-- 1 root root 130K Apr  2 16:11 foo-1.jpeg
-rw-r--r-- 1 root root 334K Mar 24 14:27 foo.pdf

升级ImageMagick后

[root@home]#  convert -version
Version: ImageMagick 6.7.8-10 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP

生成的文件大小:

-rw-r--r-- 1 root root  60K Apr  2 16:11 foo-0.jpeg
-rw-r--r-- 1 root root  55K Apr  2 16:11 foo-1.jpeg
-rw-r--r-- 1 root root 334K Mar 24 14:27 foo.pdf

我尝试过使用antialias标志:

convert -antialias  foo.pdf foo.jpeg

哪个没做,我尝试设置更高的quality

convert -quality 100 foo.pdf foo.jpeg

super sampling

convert -density 288 -background white -alpha off foo.pdf -resize 25%  foo.jpeg

两者都提供了更大的文件和更好的结果,但运行时间更长,质量低于旧的ImageMagick版本。

任何建议?

Link to the file

3 个答案:

答案 0 :(得分:34)

我发现您的示例文件存在同样的问题。看起来ImageMagick的PDF转换代表可能已随新安装而改变。

如果您尝试convert -verbose foo.pdf foo.jpeg,您是否在发送给gs的命令中看到-sDEVICE=pngalpha? pnmraw设备过去一直在使用,切换回来似乎可以解决我的问题。

在ImageMagick的delegates.xml文件中(可能在/ etc / ImageMagick中,但可能在其他位置,具体取决于您的设置),请查找decode="ps:alpha"委托行并更改-sDEVICE=pngalpha in -sDEVICE=pnmraw的命令。 (您可以在文件中搜索pngalpha。)

答案 1 :(得分:9)

DPI 似乎有问题。转换pdf时,使用 Ghostscript 进行imagemagick。你可以跳过使用imagemagick。

$ gs -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dGridFitTT=2 -dUseCropBox -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r200x200 -sDEVICE=jpeg -dJPEGQ=100 -sOutputFile=foo-%05d.jpg foo.pdf

设置-r选项更高的值。 Ghostscript 默认值为100DPI。

或使用转换选项-density。此选项设置pdf转换DPI。

$ convert -density 200x200 foo.pdf foo.jpg

答案 2 :(得分:0)

PDF文件是矢量文件,没有特定的大小。通过在PDF文件中读取之前定义密度和单位来控制它们的大小。通过超级采样,您可以获得相同的所需输出文件大小的更好质量。这意味着将PDF栅格化为较大的尺寸,然后调整为所需的实际尺寸。例如在ImageMagick中:

convert -units pixelsperinch -density 288 image.pdf -resize 25% output.jpg

如果不使用,则标称密度为72 dpi。所以72 * 4 = 288。然后调整大小1/5 = 25%恢复到相同的默认大小,但应该看起来好多了。根据需要更改密度或调整大小以处理质量和最终尺寸。