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

将ImageMagick版本升级到6.7.8后,将pdf转换为jpeg的ImageMagick文本质量较差,imagemagick,imagemagick-convert,pdf-conversion,Imagemagick,Imagemagick Convert,Pdf Conversion,升级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 Imag

升级
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
生成的文件大小:

-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
-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
升级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 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
-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
我尝试过使用flag:

这没什么作用,我试着设定一个更高的:

以及:

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

有什么建议吗


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

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


在ImageMagick的
delegates.xml
文件中(可能在/etc/ImageMagick中,但可能在其他地方,具体取决于您的设置),查找
decode=“ps:alpha”
代理行,并将命令中的
-sDEVICE=pngalpha
更改为
-sDEVICE=pnmraw
。(您可能只需在文件中搜索pngalpha即可。)

在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

或者使用转换选项-密度。此选项设置pdf转换的DPI

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

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

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

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

您能提供示例文件的下载链接供我测试吗?我已在问题末尾添加了一个链接,感谢使用更高版本的ImageMagick?$转换——版本:ImageMagick 6.7.7-10 2012-08-17 Q16。这是Linux Mint Nadia上的一个例子,我们也来看看:你想要
-alpha-remove
而不是
-alpha-off
。很高兴听到这个消息。ImageMagick中的PDF转换可能是一个很大的难题,但当它起作用时,它是非常棒的。想要使用此解决方案的人应该知道delegate.xml的更改是有原因的,这样他们就不会给自己带来其他问题:感谢链接,这是一个很好的观点。这个评论也提出了一些我曾考虑过的问题,但我忘了在回答中包括:你可以直接使用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
我发现只需添加
-flatte
即可解决问题,无需编辑delegates.xml
convert image.png-flatte image.jpg
看起来问题来自处理alpha,在这种情况下,另一个(已测试)选项是使用
-alpha remove
。newtricks建议的
-flatte
选项也适用。
convert -units pixelsperinch -density 288 image.pdf -resize 25% output.jpg