Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PythonMagick中处理多页图像?_Python_Pythonmagick - Fatal编程技术网

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

如何在PythonMagick中处理多页图像?,python,pythonmagick,Python,Pythonmagick,我想将一些多页.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('

我想将一些多页.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。
当然,我可以单独加载每一页并逐个转换它们。但一定有一种方法可以一次完成所有任务

我也遇到了同样的问题,作为一项工作,我使用ImageMagick并做到了

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

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

基于Ivo Flipse和

这将使用更高的分辨率,并使用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')

你找到了多页pdf文件的解决方案吗?你找到了解决方案吗。我也有同样的问题。