6

我想将一些多页 .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。当然,我可以单独加载每个页面并一一转换。但是必须有一种方法可以一次完成所有这些操作吗?

4

3 回答 3

7

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')
于 2012-08-02T22:46:52.753 回答
2

基于 Ivo Flipse 和http://ps.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')
于 2014-05-30T11:20:57.353 回答
1

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

import subprocess
params = ['convert', 'src.pdf', 'out.png']
subprocess.check_call(params)
于 2012-08-01T05:49:32.203 回答