我想将一些多页.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")但我只有一个页面转换为png。当然,我可以单独加载每个页面,并逐个转换它们。但必须有一种方法可以一次完成所有这些任务?
发布于 2012-08-03 06:46:53
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')发布于 2014-05-30 19:20:57
基于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')发布于 2012-08-01 13:49:32
我也遇到了同样的问题,作为解决办法,我使用了ImageMagick,并做到了
import subprocess
params = ['convert', 'src.pdf', 'out.png']
subprocess.check_call(params)https://stackoverflow.com/questions/10489960
复制相似问题