如何将多页PDF转换为Python中的图像对象列表?

时间:2017-03-28 08:14:59

标签: python image image-processing wand

我想将多页PDF文档转换为列表结构中的一系列图像对象,而不是在Python中将图像保存在磁盘中(我想用PIL Image处理它们)。到目前为止,我只能将图像写入文件:

from wand.image import Image

with Image(filename='source.pdf') as img:

    with img.convert('png') as converted:
        converted.save(filename='pyout/page.png')

但是我怎样才能将上面的img对象直接转换为PIL.Image对象列表?

3 个答案:

答案 0 :(得分:3)

简单的方法是保存图像文件,并使用PIL读取后将其删除。

我建议使用pdf2image软件包。 在使用pdf2image软件包之前,您可能需要通过anaconda安装poppler软件包

conda install -c conda-forge poppler

如果卡住了,请在安装前更新conda:

conda update conda
conda update anaconda

在安装poppler之后,通过pip安装pdf2image:

pip install pdf2image

然后运行以下代码:

from pdf2image import convert_from_path
dpi = 500 # dots per inch
pdf_file = 'work.pdf'
pages = convert_from_path(pdf_file ,dpi )
for i in range(len(pages)):
   page = pages[i]
   page.save('output_{}.jpg'.format(i), 'JPEG')

此后,请使用PIL阅读并删除它们。

答案 1 :(得分:2)

新答案:

pip install pdf2image

     DESCRIBE formatted part_table partition( partitionName)

您可能还需要安装枕头。这可能只适用于linux。

https://github.com/Belval/pdf2image

两种方法的结果可能不同。

旧答案:

Python 3.4:

from pdf2image import convert_from_path, convert_from_bytes
images = convert_from_path('/path/to/my.pdf')

最后,您可以对mogrify进行系统调用,但由于需要管理临时文件,这可能会更复杂。

答案 2 :(得分:0)

我对魔杖的回答如下:

from wand.image import Image as wi
...
Data = filedialog.askopenfilename(initialdir="/", title="Choose File", filetypes = (("Portable Document Format","*.pdf"),("All Files", "*.*")))
apps.append(Data)
print(Data)
PDFfile = wi(filename = Data, resolution = 300)
Images = PDFfile.convert('tiff')
ImageSequence = 1
for img in PDFfile.sequence:
    image = wi(image = img)
    image.save(filename = "Document_300"+"_"+str(ImageSequence)+".tiff")
    ImageSequence += 1

希望这会对您有所帮助。

我已经通过GUI实现了它,您可以在其中选择文件。

您还可以更改jpg等中的PDFfile.convert()。