将 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)
我想使用 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)