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

ImageMagick convert pdf to jpeg has poor text quality after upgrading ImageMagick version to 6.7.8

升级ImageMagick后,将pdf转换为jpeg时,文本质量下降:

旧图
enter image description here

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

旧的ImageMagick版本:

1
2
3
[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

生成的文件大小:

1
2
3
-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之后

1
2
3
4
[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

生成的文件大小:

1
2
3
-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标志:

1
convert -antialias  foo.pdf foo.jpeg

什么都没做,我尝试设置更高的quality

1
convert -quality 100 foo.pdf foo.jpeg

和超级采样:

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

两者都提供了更大的文件和更好的结果,但与旧的ImageMagick版本相比,它们运行的时间更长且质量较低。

有什么建议吗?

链接到文件


我在您的示例文件中看到了同样的问题。看起来,使用新安装的ImageMagick的PDF转换委托可能已更改。

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

在ImageMagick的delegates.xml文件(可能在/ etc / ImageMagick中,但根据您的设置可能在其他位置)中,查找decode="ps:alpha"委托行并将命令中的-sDEVICE=pngalpha更改为-sDEVICE=pnmraw。 (您可能只需要在文件中搜索pngalpha。)


DPI似乎有这个问题。当转换PDF,imagemagick使用Ghostscript的。您可以跳过使用imagemagick。

1
$ 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。

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


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

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

如果未设置,则标称密度为72 dpi。因此72 * 4 = 288。然后将大小调整为1/5 = 25%,可以恢复为相同的默认大小,但看起来应该更好。根据需要更改密度或调整大小以处理质量和最终大小。