将 PIL.JpegImagePlugin.JpegImageFile 张图片插入 PowerPoint

Insert PIL.JpegImagePlugin.JpegImageFile image into PowerPoint

我想使用 PIL 打开图像,对其进行一些更改,然后将其插入到 PowerPoint 幻灯片中。下面是我的代码:

from PIL import Image 
# Open the image
im1 = Image.open(imPath)
## Make some changes 
im2 = add_corners(im1, 50)
## Insert into slide
im3 = slide.shapes.add_picture(im2,
                               left=Cm(1),
                               top=Cm(1),
                               height=Cm(3.25))

但是,当我这样做时,我得到 AttributeError: 'JpegImageFile' object has no attribute 'read'

为了绕过它,我一直在某个地方保存 im2,然后在将它插入 PowerPoint 时提供它的路径,但这似乎不是最好的策略。可以直接插进去吗?

Shapes.add_picture() 不接受 PIL 图片。它只接受实际保存的格式,如 JPEG 或 PNG。您可以将这些作为 BytesIO 对象提供,因此不需要临时文件。只需将 PIL 图像保存到 BytesIO 对象,然后将其(在调用 seek(0) 之后)像这样提供给 .add_picture()

import io

image = add_corners(Image.open(imPath), 50)
image_stream = io.BytesIO()
image.save(image_stream, "PNG")
image_stream.seek(0)
picture = slide.shapes.add_picture(image_stream, left, top)