You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量为目录图片生成单页PPT幻灯片报错求助

解决AttributeError: 'Image' object has no attribute 'read'问题

问题根源

slide.shapes.add_picture() 方法仅接受图片文件路径字符串或支持read()方法的文件对象,但你代码中存储的是PIL库打开的Image实例,这类对象不存在read()方法,因此触发了该错误。

修正后的代码

无需使用PIL、cv2等额外库读取图片,直接传递文件路径给add_picture()即可。同时针对你1024x1024的正方形图片,优化了居中逻辑:

from pptx import Presentation
from pptx.util import Inches
import os

# 初始化PPT对象
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]

# 获取幻灯片尺寸(默认10英寸宽,7.5英寸高)
slide_width = prs.slide_width
slide_height = prs.slide_height

image_dir = "Z:\\Programming Stuff\\Images\\Testing"

# 遍历目录下的图片文件
for filename in os.listdir(image_dir):
    # 兼容大小写的后缀判断
    if filename.lower().endswith((".jpg", ".png")):
        img_path = os.path.join(image_dir, filename)
        
        # 添加空白幻灯片
        slide = prs.slides.add_slide(blank_slide_layout)
        
        # 正方形图片设置为幻灯片内最大可容纳尺寸
        max_side = min(slide_width, slide_height)
        pic_width = max_side
        pic_height = max_side
        
        # 计算居中位置
        left = (slide_width - pic_width) / 2
        top = (slide_height - pic_height) / 2
        
        # 将图片添加到幻灯片指定位置
        slide.shapes.add_picture(img_path, left, top, width=pic_width, height=pic_height)

# 保存生成的PPT
prs.save('test.pptx')

关键优化点

  • 移除了所有不必要的库导入,简化代码结构
  • 直接传递图片路径,避免对象类型不匹配的错误
  • 动态计算图片尺寸和居中位置,替代硬编码偏移值,适配不同幻灯片比例
  • 统一使用小写后缀判断,避免因文件名大小写导致的遗漏

内容的提问来源于stack exchange,提问作者Electro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:20:14