【问题标题】:How to save an image list in PDF using PIL (pillow)?如何使用 PIL(枕头)将图像列表保存为 PDF?
【发布时间】:2018-04-28 17:52:47
【问题描述】:

我想使用 PIL .save() 方法将我的 PIL 图像列表导出为 pdf。

PIL document 中,保存部分说: => 我们可以将append_images 选项用于pdf格式。

在枕头的 github 页面中,this issue 说:Added append_images to PDF saving #2526

我写了这段代码:

import PIL
im1 = PIL.Image.open("1.jpg").convert("RGB")
im2 = PIL.Image.open("2.jpg").convert("RGB")
im3 = PIL.Image.open("3.jpg").convert("RGB")
images = [im1,im2,im3]
images[0].save("out.pdf", save_all=True, append_images=images[1:])

但它不起作用!

出现这些错误:

Traceback (most recent call last):
  File "sample.py", line 13, in <module>
gif.save("out.pdf", save_all=True, append_images=images)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PIL/Image.py", line 1928, in save
save_handler(self, fp, filename)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PIL/PdfImagePlugin.py", line 55, in _save_all
_save(im, fp, filename, save_all=True)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PIL/PdfImagePlugin.py", line 182, in _save
Image.SAVE["JPEG"](im, op, filename)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 609, in _save
info = im.encoderinfo
AttributeError: 'Image' object has no attribute 'encoderinfo'

【问题讨论】:

  • 微不足道,但你应该改写append_images=images。您还可以将导入语句更改为from PIL import Image,然后使用Image.open(..)
  • @VasilisG。好的。但错误没有解决! :|
  • 看看here。除此之外,我想不出别的了。
  • PDF 格式不是图像格式(尽管它可以包含其中的一个或多个),因此 PIL/Pillow 不知道如何在其中保存图像格式。您需要使用其他一些模块来创建 PDF 文件(并且可能允许您向其中添加图像)。 reportlab 可能是一个不错的选择。
  • 我认为这是一个错误。在 Python 3.6.0 上使用 Pillow 4.3.0 我可以轻松保存单个 PDF 图像。我可以使用append_images arg 调用.save 方法来编写正确的多帧GIF。如果源图像是 GIF,我什至可以保存多帧 PDF,但是当我检查生成的 PDF 文件时,它是不正确的。我在测试中使用了 3 张图像,输出 PDF 由 3 页组成,每列包含 3 张图像,顶部和底部图像似乎是我列表中的第一张图像,中间图像是错误解码的版本我的第一张图片。 :(

标签: python pdf python-imaging-library


【解决方案1】:

这个问题在 PIL 版本 5.0.0 (https://pillow.readthedocs.io/en/latest/) 中得到解决。

【讨论】:

  • 您能否链接到文档中说明如何执行此操作的实际部分?
【解决方案2】:

试试这个格式

from PIL import Image
im1 = PIL.Image.open("1.jpg").convert("RGB")
im2 = PIL.Image.open("2.jpg").convert("RGB")
im3 = PIL.Image.open("3.jpg").convert("RGB")
images = [im2,im3]
im1.save("out.pdf", save_all=True, append_images=images)

【讨论】:

  • 问题不在于 OP 的代码错误,而在于他们使用的 PIL 版本有错误。发布稍微重新排序的 OP 代码版本没有用。
【解决方案3】:

有点离题,但如果您有大量图像要转换,则使用列表推导是可行的方法。

from PIL import Image

im1=Image.open('1.png').convert('RGB')
images = [Image.open(str(imgNumber)+'.png').convert('RGB') for imgNumber in range(2,100)]
im1.save("imgBook.PDF", save_all=True, append_images=images)

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多