3

我正在尝试从剪贴板获取图像,并且想将该图像添加到 python-pptx 中。我不想将图像保存在磁盘中。我试过这个:

from pptx import Presentation
from PIL import ImageGrab,Image
from pptx.util import Inches
im = ImageGrab.grabclipboard()
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
left = top = Inches(1)
pic = slide.shapes.add_picture(im, left, top)
prs.save('PPT.pptx')

但是得到这个错误

File "C:\Python27\lib\site-packages\PIL\Image.py", line 627, in __getattr__
    raise AttributeError(name)
AttributeError: read

这有什么问题?

4

3 回答 3

3

这对我有用

import io
import PIL
from pptx import Presentation
from pptx.util import Inches

# already have a PIL.Image as image
prs = Presentation()
blank_slide = prs.slide_layout[6]
left = top = Inches(0)

# I had this part in a loop so that I could put one generated image per slide
image: PIL.Image = MyFunctionToGetImage()
slide = prs.slides.add_slide(blank_slide)
with io.BytesIO() as output:
    image.save(output, format="GIF")
    pic = slides.add_slide(output, left, top)
# end loop
prs.save("my.pptx")
于 2019-10-08T21:07:41.320 回答
1

图像需要采用流(即逻辑文件)对象的形式。因此,您需要先将其“保存”到内存文件中,可能 StringIO 就是您要查找的内容。

这个另一个问题提供了一些细节。

于 2016-09-12T23:03:35.473 回答
0

如果你有一个 img 作为字节,试试这个

    print(type(img)) #<class 'bytes'>       
    img_as_file = io.BytesIO()
    img_as_file.write(img)
    slide.shapes.add_picture(img_as_file,left,top)
于 2021-10-21T13:52:16.467 回答