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

Tic*_*kon 6 python pythonmagick

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

convert multi_page.pdf file_out.png
Run Code Online (Sandbox Code Playgroud)

我将所有页面作为单独的图像(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")
Run Code Online (Sandbox Code Playgroud)

要不就

im.write("file_out.png")
Run Code Online (Sandbox Code Playgroud)

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

Tic*_*kon 7

ImageMagick不具有内存效率,因此如果您尝试读取大型pdf(例如100页左右),内存需求将非常大,可能会崩溃或严重降低系统速度.因此,毕竟用PythonMagick一次阅读所有页面是一个坏主意,它不安全.所以对于pdfs,我最终逐页完成,但为此我需要首先使用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')
Run Code Online (Sandbox Code Playgroud)