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
相关产品推荐
相关产品推荐

