我想将多页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对象列表?
答案 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()。