【问题标题】:Python Wand converts from PDF to JPG background is incorrectPython Wand 从 PDF 转换为 JPG 背景不正确
【发布时间】:2013-12-24 17:01:41
【问题描述】:

我在将 pdf 转换为 jpeg 时发现了一个如此连线的东西,所以我想弄清楚这可能是一个小错误。 看下面的转换后的jpg,你会发现,背景颜色都是黑色的。 图片在这里:www.shdowin.com/public/02.jpg

但是,在pdf的源文件中,可以看到背景颜色是正常的白色。 图片在这里:www.shdowin.com/public/normal.jpg

我认为这可能是我的 pdf 文件的错误,但是,当我尝试在 .NET 环境中使用 Acrobat.pdf2image 时,转换后的 jpg 显示正确。

这是我的代码:

from wand.image import Image
from wand.color import Color
import os, os.path, sys

def pdf2jpg(source_file, target_file, dest_width, dest_height):
    RESOLUTION    = 300
    ret = True
    try:
        with Image(filename=source_file, resolution=(RESOLUTION,RESOLUTION)) as img:
            img.background_color = Color('white')
            img_width = img.width
            ratio     = dest_width / img_width
            img.resize(dest_width, int(ratio * img.height))
            img.format = 'jpeg'
            img.save(filename = target_file)
    except Exception as e:
        ret = False

    return ret

if __name__ == "__main__":
    source_file = "./02.pdf"
    target_file = "./02.jpg"

    ret = pdf2jpg(source_file, target_file, 1895, 1080)

对这个问题有什么建议吗?

我已将 pdf 上传到网址: 02.pdf

你可以试试……

【问题讨论】:

  • 您安装了哪些 ImageMagick 和 GhostScript 版本?因为,在这种情况下,所有的工作都是 Ghostscript。你能检查一下 Ghostscript 光栅化你的 PDF 是否有错误吗? 9.10 版适用于您的文件。
  • 感谢 VadimR,我多次测试了您的 cmets,但在这种情况下仍然无法正确渲染。我的 ImageMagick 版本是 6.8.7-4(32 位),我的 ghostScript 版本是 9.10 和 9.07(都经过测试),它们都不起作用。你能帮我看看你的 ImageMagick 版本是什么吗?那会很有帮助..3x~~~
  • IM 的版本是6.7.7-10 2013-09-10 Q16,我目前使用的是 Ubuntu 13.10。当您说“两者都不起作用”时,您的意思是 gs 02.pdfconvert 02.pdf 02.jpg 给您的图片不正确吗?
  • 您好 VadimR,再次感谢。我的意思是“两者都不起作用”是 Windows 中的 ghostScript 9.10 和 Ubuntu13.04 中的 gs 9.07 在这些 PYTHON 代码中都不起作用。我试过你给我看的“convert and gs”(gs9.07),它们工作得很好,但是它们不是我需要你知道的,因为我不熟悉ghostscript语言。你觉得是魔杖的问题吗?因为我每天需要转换数百个 pdf,所以这些 pdf 中只有少数是这样的。你能试试这些 Python 代码吗?魔杖版本是 0.3.5
  • 如果 IM 和 GS 本身都在您的系统上生成正确的图像,那么代码或库(棒)会给出不正确的结果。抱歉,我不知道也不会使用 Python。由于PDF 标签,我提出了您的问题,并且我对不寻常的 PDF 感兴趣:)。也许有人会帮忙。但是您可以从 Python 调用任何系统命令,包括将 PDF 转换为 JPG 的命令,如果它不起作用,则无需使用魔杖。假设此代码是您的大型 Python 应用程序的一个片段。

标签: python image pdf jpeg wand


【解决方案1】:

我自己得到了答案。这是因为 alpha_channel 案例。此 pdf 包含一些透明背景(在我转换为 png 格式后),并且对于调整大小,ImageMagick 选择最佳调整大小过滤器,因此显示黑色背景。

所以,经过大量实验,我发现只需在“with”语句中(img.save()之前)添加“img.alpha_channel=False”,就可以正常工作了。

感谢 VadimR 的建议,很有帮助。

【讨论】:

    【解决方案2】:

    一个简单的解决方案是更改命令的顺序:先将格式更改为 jpeg,然后再调整大小

            img.format = 'jpeg'
            img.resize(dest_width, int(ratio * img.height))
    

    通过分辨率元组打开精确大小的PDF也很容易,因为分辨率可以是浮点数。

    【讨论】:

      【解决方案3】:

      对于仍然有这个问题的其他人,我在谷歌搜索并尝试了几个小时后修复了它,感谢这个问题https://stackoverflow.com/a/40494320/2686243 使用这两行:

      img.background_color = Color("white")
      img.alpha_channel = 'remove'
      

      尝试使用 Wand 版本 0.4.4

      【讨论】:

        猜你喜欢
        • 2015-05-07
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        相关资源
        最近更新 更多