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

Kuf*_*Kuf 31 imagemagick pdf-conversion imagemagick-convert

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

旧图像 在此输入图像描述

新图片 在此输入图像描述 转换命令: 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
Run Code Online (Sandbox Code Playgroud)

生成的文件大小:

-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
Run Code Online (Sandbox Code Playgroud)

升级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
Run Code Online (Sandbox Code Playgroud)

生成的文件大小:

-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
Run Code Online (Sandbox Code Playgroud)

我尝试过使用antialias旗帜:

convert -antialias  foo.pdf foo.jpeg
Run Code Online (Sandbox Code Playgroud)

什么都没做,我试过设置更高quality:

convert -quality 100 foo.pdf foo.jpeg
Run Code Online (Sandbox Code Playgroud)

超级采样:

convert -density 288 -background white -alpha off foo.pdf -resize 25%  foo.jpeg
Run Code Online (Sandbox Code Playgroud)

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

任何建议?

链接到该文件

pot*_*toe 35

我看到你的示例文件存在同样的问题.看起来ImageMagick的PDF转换代表可能已随新安装而更改.

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

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

  • 感谢您的链接,这是一个很好的观点.这个评论也提出了我考虑过的东西,但是忘了在答案中包含:你可以直接使用ghostscript来进行PDF转换,尽管它的使用不太友好.像这样的东西:`gs -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap = 500000000 -dAlignToPixels = 0 -dGridFitTT = 2 -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -r150 -sOutputFile = foo-% d.jpg foo.pdf` (6认同)
  • 我发现只需添加`-flatten`即可解决问题而无需编辑*delegates.xml*.`convert image.png -flatten image.jpg` (3认同)
  • 看起来问题来自处理alpha,在这种情况下,另一个(测试的)选项是使用`-alpha remove`.newtricks建议的`-flatten`选项也有效. (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

set -r选项更高的值.Ghostscript的默认值是100DPI.

或使用转换选项-density.此选项设置pdf转换后的DPI.

$ convert -density 200x200 foo.pdf foo.jpg
Run Code Online (Sandbox Code Playgroud)