【问题标题】:ImageMagick convert pdf to jpeg has poor text quality after upgrading ImageMagick version to 6.7.8将 ImageMagick 版本升级到 6.7.8 后,ImageMagick convert pdf to jpeg 文本质量很差
【发布时间】:2013-03-24 01:44:45
【问题描述】:

升级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

升级 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

【问题讨论】:

  • 能否提供示例文件的下载链接供我测试?
  • 我在问题末尾添加了一个链接,谢谢
  • 尝试使用更高版本的 ImageMagick? $ convert --version 版本:ImageMagick 6.7.7-10 2012-08-17 Q16。这是在 Linux Mint Nadia 上
  • 你想要-alpha remove而不是-alpha off

标签: imagemagick imagemagick-convert pdf-conversion


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    DPI 似乎存在问题。转换 pdf 时,imagemagick 使用 Ghostscript。您可以使用 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
    

    【讨论】:

      【解决方案3】:

      我发现您的示例文件存在同样的问题。看起来 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。)

      【讨论】:

      • 很高兴听到这个消息。 ImageMagick 中的 PDF 转换可能会很痛苦,但它在工作时很棒。
      • 想要使用此解决方案的人应该知道,delegate.xml 被更改是有原因的,这样他们就不会为自己制造其他问题:imagemagick.com/discourse-server/…
      • 感谢您的链接,这是一个很好的观点。该评论还提出了我考虑过的一些问题,但忘记包含在答案中:您可以直接使用 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
      • 我发现只需添加 -flatten 即可解决问题,而无需编辑 delegates.xmlconvert image.png -flatten image.jpg
      • 看起来问题来自处理 alpha,在这种情况下,另一个(经过测试的)选项是使用 -alpha remove。 newtricks 建议的 -flatten 选项也有效。
      猜你喜欢
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2016-09-25
      • 1970-01-01
      相关资源
      最近更新 更多