【问题标题】:How to handle multi-page images in PythonMagick?如何在 PythonMagick 中处理多页图像?
【发布时间】:2012-05-16 10:13:24
【问题描述】:

我想将一些多页 .tif 或 .pdf 文件转换为单独的 .png 图像。从命令行(使用 ImageMagick)我只是这样做:

convert multi_page.pdf file_out.png

我将所有页面作为单独的图像(file_out-0.png、file_out-1.png、...)

我想在 Python 中处理这个文件转换,不幸的是 PIL 无法读取 .pdf 文件,所以我想使用 PythonMagick。我试过了:

import PythonMagick
im = PythonMagick.Image('multi_page.pdf')
im.write("file_out%d.png")

或者只是

im.write("file_out.png")

但我只有 1 页转换为 png。 当然,我可以单独加载每个页面并一一转换。但是必须有一种方法可以一次完成所有这些操作吗?

【问题讨论】:

  • 你找到解决 mul pages pdf 文件的方法了吗?
  • 您找到任何解决方案了吗?我有同样的问题。

标签: python pythonmagick


【解决方案1】:

ImageMagick 的内存效率不高,因此如果您尝试阅读较大的 pdf,例如 100 页左右,内存需求将会很大,并且可能会崩溃或严重拖慢您的系统。所以毕竟用 PythonMagick 一次阅读所有页面是个坏主意,它不安全。 因此,对于 pdf,我最终逐页进行,但为此我需要先使用 pyPdf 获取页数,它相当快:

pdf_im = pyPdf.PdfFileReader(file('multi_page.pdf', "rb"))
npage = pdf_im.getNumPages()
for p in npage:
    im = PythonMagick.Image('multi_page.pdf['+ str(p) +']')
    im.write('file_out-' + str(p)+ '.png')

【讨论】:

    【解决方案2】:

    基于 Ivo Flipse 和 http://p-s.co.nz/wordpress/pdf-to-png-using-pythonmagick/ 的答案的更完整示例

    这使用更高的分辨率并使用 PyPDF2 而不是旧的 pyPDF。

    import sys
    import PyPDF2
    import PythonMagick
    
    pdffilename = sys.argv[1] 
    pdf_im = PyPDF2.PdfFileReader(file(pdffilename, "rb"))
    npage = pdf_im.getNumPages()
    print('Converting %d pages.' % npage)
    for p in range(npage):
        im = PythonMagick.Image()
        im.density('300')
        im.read(pdffilename + '[' + str(p) +']')
        im.write('file_out-' + str(p)+ '.png')
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,作为解决方法,我使用了 ImageMagick 并做到了

      import subprocess
      params = ['convert', 'src.pdf', 'out.png']
      subprocess.check_call(params)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多