Вставьте изображение PIL.JpegImagePlugin.JpegImageFile в PowerPoint - PullRequest
0 голосов
/ 14 апреля 2020

Я хотел бы открыть изображение с помощью 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, но это не самая лучшая стратегия. Можно ли вставить его прямо в?

1 Ответ

1 голос
/ 14 апреля 2020

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)
...