使用Python操作PowerPoint中的图片的完整指南

 更新时间:2026年10月01日 06:44:07   作者:用户835629078051  
演示文稿里图片几乎不可或缺:公司 Logo、产品截图、流程图、配图都靠图片传达信息,往幻灯片上放一张图片看似简单,但要精确控制位置、大小、边框和透明度,本文以 Spire.Presentation for Python 为例,介绍如何在幻灯片上操作图片,需要的朋友可以参考下

引言

演示文稿里图片几乎不可或缺:公司 Logo、产品截图、流程图、配图都靠图片传达信息。往幻灯片上放一张图片看似简单,但要精确控制位置、大小、边框和透明度,或者在多份文稿里批量替换旧 Logo,手动操作就不够用了。

本文以 Spire.Presentation for Python 为例,介绍如何在幻灯片上插入图片、缩放图片尺寸、设置图片框的边框和旋转角度、给图片加透明度、替换已有图片,以及批量删除幻灯片上的图片。

环境准备

安装 Spire.Presentation 库:

pip install Spire.Presentation

在脚本中引入模块:

from spire.presentation import *
from spire.presentation.common import *

在幻灯片上插入图片

AppendEmbedImageByPath() 把图片嵌入到指定幻灯片的矩形区域内,返回一个图片形状对象:

import math

presentation = Presentation()
presentation.LoadFromFile("演示文稿.pptx")

imagePath = "logo.png"
# 计算居中位置
left = math.trunc(presentation.SlideSize.Size.Width / float(2)) - 280
rect = RectangleF.FromLTRB(left, 140, 120 + left, 260)

# 在第一张幻灯片插入图片
image = presentation.Slides[0].Shapes.AppendEmbedImageByPath(
    ShapeType.Rectangle, imagePath, rect)
# 去掉默认边框
image.Line.FillType = FillFormatType.none

presentation.SaveToFile("插入图片.pptx", FileFormat.Pptx2010)
presentation.Dispose()

RectangleF.FromLTRB(left, top, right, bottom) 定义图片在幻灯片上的位置和大小,单位为像素。ShapeType.Rectangle 指定容器形状类型。插入后默认带边框,把 Line.FillType 设为 FillFormatType.none 即可去掉。

缩放幻灯片上的图片

已经存在的图片可以通过遍历 Shapes 集合找到,再按比例调整 Width 和 Height:

presentation = Presentation()
presentation.LoadFromFile("演示文稿.pptx")

scale = 0.5
for slide in presentation.Slides:
    for shape in slide.Shapes:
        if isinstance(shape, IEmbedImage):
            shape.Width = shape.Width * scale
            shape.Height = shape.Height * scale

presentation.SaveToFile("缩放图片.pptx", FileFormat.Pptx2013)
presentation.Dispose()

isinstance(shape, IEmbedImage) 用来筛选出图片形状,跳过文本框、表格等其他形状。scale = 0.5 把每张图片缩小到原来的一半。按比例缩放可以保持宽高比不变形。

设置图片框的边框和旋转

插入图片时返回的对象本身就是形状,可以设置边框线型、宽度和旋转角度:

import math

presentation = Presentation()

stream = Stream("logo.png")
imageData = presentation.Images.AppendStream(stream)
stream.Close()

# 以图片原始尺寸的一半插入
rect = RectangleF.FromLTRB(
    100, 100,
    math.trunc(imageData.Width / float(2)) + 100,
    math.trunc(imageData.Height / float(2)) + 100)
pptImage = presentation.Slides[0].Shapes.AppendEmbedImageByImageData(
    ShapeType.Rectangle, imageData, rect)

# 设置边框:实线、浅蓝色、宽度 5
pptImage.Line.FillFormat.FillType = FillFormatType.Solid
pptImage.Line.FillFormat.SolidFillColor.Color = Color.get_LightBlue()
pptImage.Line.Width = 5
# 旋转 -45 度
pptImage.Rotation = -45

presentation.SaveToFile("图片框格式.pptx", FileFormat.Pptx2013)
presentation.Dispose()

AppendEmbedImageByImageData() 用已加载的图片数据插入,适合同一张图片要多次使用的场景——先 Images.AppendStream() 加载一次,再重复引用。Line.FillFormat 控制边框填充,Rotation 控制旋转角度(正值为顺时针,负值为逆时针)。

给图片设置透明度

透明度需要通过形状填充来实现:先把图片加载到文稿的图片集合,再画一个矩形形状并用该图片填充,最后设置透明度:

from spire.presentation import *

presentation = Presentation()
stream = Stream("logo.png")
imageData = presentation.Images.AppendStream(stream)
stream.Close()

# 从图片数据读取尺寸
width, height = imageData.Width, imageData.Height
rect = RectangleF.FromLTRB(200, 100, width + 200, height + 100)
shape = presentation.Slides[0].Shapes.AppendShape(ShapeType.Rectangle, rect)
shape.Line.FillType = FillFormatType.none

# 用图片填充形状
shape.Fill.FillType = FillFormatType.Picture
shape.Fill.PictureFill.Picture.EmbedImage = presentation.Images[0]
shape.Fill.PictureFill.FillType = PictureFillType.Stretch

# 设置透明度为 50%
shape.Fill.PictureFill.Picture.Transparency = 50

presentation.SaveToFile("透明图片.pptx", FileFormat.Pptx2013)
presentation.Dispose()

Images.AppendStream() 把图片加入文稿资源池并返回图片数据,从中可以直接读取 Width 和 Height,无需借助 Pillow。FillType = FillFormatType.Picture 把形状填充切换为图片,EmbedImage 指向资源池中的图片对象,PictureFillType.Stretch 让图片拉伸填满形状。Transparency 取值 0 到 100,数值越大越透明。这种方式适用于需要把图片当背景或水印的场景。

替换已有的图片

更新 Logo 或换图时,先把新图片加载到文稿的图片集合,再把它赋给目标图片形状的 EmbedImage:

ppt = Presentation()
ppt.LoadFromFile("演示文稿.pptx")
slide = ppt.Slides[0]

# 加载新图片
stream = Stream("new_logo.png")
newImage = ppt.Images.AppendStream(stream)
stream.Close()

# 找到标题为 "image1" 的图片并替换
for shape in slide.Shapes:
    if isinstance(shape, SlidePicture):
        if shape.AlternativeTitle == "image1":
            shape.PictureFill.Picture.EmbedImage = newImage

ppt.SaveToFile("替换图片.pptx", FileFormat.Pptx2013)
ppt.Dispose()

SlidePicture 是幻灯片图片形状的类型。通过 AlternativeTitle 定位到要替换的图片,再把新图片数据赋给 PictureFill.Picture.EmbedImage,即可完成替换。AppendStream() 把新图片加入文稿的图片资源池,替换时只是把形状指向新的资源。

删除幻灯片上的图片

清理不需要的图片,遍历 Shapes 并倒序移除:

ppt = Presentation()
ppt.LoadFromFile("演示文稿.pptx")
slide = ppt.Slides[0]

for i in range(slide.Shapes.Count - 1, -1, -1):
    if isinstance(slide.Shapes[i], SlidePicture):
        slide.Shapes.RemoveAt(i)

ppt.SaveToFile("删除图片.pptx", FileFormat.Pptx2013)
ppt.Dispose()

isinstance(slide.Shapes[i], SlidePicture) 判断形状是否为图片,RemoveAt(i) 按索引删除。倒序遍历避免删除后索引错位。

实用提示

  • RectangleF.FromLTRB 的四个参数是左、上、右、下坐标,不是宽和高,容易写错。
  • 插入图片后默认有边框,需要纯图片效果时记得把 Line.FillType 设为 none。
  • 同一张图片多次使用时,先用 Images.AppendStream() 加载一次再引用,比每次 AppendEmbedImageByPath() 更省体积。
  • 设置透明度需要通过形状填充实现,直接对 IEmbedImage 设置 Transparency 不生效。
  • 处理完调用 presentation.Dispose() 释放资源。

总结

本文介绍了用 Python 在 PowerPoint 中处理图片的常用操作:用 AppendEmbedImageByPath() 在幻灯片上插入图片、遍历 IEmbedImage 缩放尺寸、设置图片框的边框和旋转、通过形状填充实现透明度、用 EmbedImage 替换已有图片,以及倒序遍历 SlidePicture 批量删除。把这些操作组合进演示文稿生成脚本,图片的插入和维护可以完全自动化。

以上就是使用Python操作PowerPoint中的图片的完整指南的详细内容,更多关于Python操作PowerPoint图片的资料请关注脚本之家其它相关文章!

相关文章

  • python中类的输出或类的实例输出为<__main__类名 object at xxxx>这种形式的原因

    python中类的输出或类的实例输出为<__main__类名 object at xxxx>这种形式的原因

    在本篇文章里小编给大家分享了关于python中类的输出或类的实例输出为何是<__main__类名 object at xxxx>这种形式,需要的朋友们可以参考下。
    2019-08-08
  • pycharm安装中文插件的2种方法图文详解

    pycharm安装中文插件的2种方法图文详解

    PyCharm可以说是当今最流行的一款Python IDE了,下面这篇文章主要给大家介绍了关于pycharm安装中文插件的2种方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • python如何通过openpyxl读写Excel文件

    python如何通过openpyxl读写Excel文件

    python操作excel的库有很多,有的库只能读取xsl格式,比如xlrd库,有的库只能写xsl格式,比如xlwt库,有的只能读写xslx格式,比如openpyxl库,综合各库及 xslx 格式比较常见,所以本文主要讲解openpyxl库对xslx格式的excel操作,需要的朋友可以参考下
    2023-10-10
  • Python+Sklearn实现异常检测

    Python+Sklearn实现异常检测

    这篇文章主要为大家详细介绍了Python如何利用Sklearn实现异常检测,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-12-12
  • Python IDLE清空窗口的实例

    Python IDLE清空窗口的实例

    今天小编就为大家分享一篇Python IDLE清空窗口的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • tensorflow与numpy的版本兼容性问题的解决

    tensorflow与numpy的版本兼容性问题的解决

    这篇文章主要介绍了tensorflow与numpy的版本兼容性问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python super()函数的基本使用

    python super()函数的基本使用

    这篇文章主要介绍了python super()函数的基本使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • 基于KL散度、JS散度以及交叉熵的对比

    基于KL散度、JS散度以及交叉熵的对比

    这篇文章主要介绍了基于KL散度、JS散度以及交叉熵的对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python pygorithm模块用法示例【常见算法测试】

    Python pygorithm模块用法示例【常见算法测试】

    这篇文章主要介绍了Python pygorithm模块用法,结合实例形式分析了pygorithm模块的功能、安装及针对常见算法的相关使用操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python中join()方法完全使用指南(参数要求与常见用法)

    Python中join()方法完全使用指南(参数要求与常见用法)

    join()是Python中字符串操作的核心方法之一,但许多开发者在使用时经常遇到TypeError或意外结果,本文将全面解析' '.join()的参数要求,通过实际示例展示正确用法,并总结常见问题的解决方案,需要的朋友可以参考下
    2025-06-06

最新评论