如何在PythonMagick中处理多页图像?

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格式。 当然,我可以逐个加载每个页面并逐个转换它们。但一次性转换全部页面的方法必须存在吧?


你找到了多页 PDF 文件的解决方案吗? - urcm
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')

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')

1

我曾经遇到过同样的问题,为了解决它,我使用了ImageMagick并进行了以下操作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接