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

如何使用python-pptx在不改变图片宽高比的前提下将图片适配到PPT

可以实现。python-pptx本身支持在不修改图片原始宽高比的前提下,将图片缩放到适配指定页面区域。

你当前的问题是调用add_picture()时仅传入了插入位置,没做尺寸限制,程序默认按图片原始分辨率对应的物理尺寸输出,你的原图分辨率达4000x6016,远大于PPT页面可展示的范围,所以才会出现图片超出页面、仅显示局部的问题。


实现逻辑

  1. 提前确定PPT页面中给图片预留的最大允许宽度、最大允许高度
  2. 读取待插入图片的原始宽高,分别计算宽度、高度两个方向的缩放比例
  3. 取两个缩放比例中更小的值作为实际缩放比例,即可保证图片既完整展示在预留区域内,又完全保留原始宽高比

修改后的可运行代码

from wand.image import Image
from pptx import Presentation
from pptx.util import Inches

prs = Presentation()
blankSideLayout = prs.slide_layouts[4]
# 可根据你的PPT布局自行调整图片预留区域的最大宽高
MAX_PIC_WIDTH = Inches(8)
MAX_PIC_HEIGHT = Inches(4)

def makePPTX(path):
   slide = prs.slides.add_slide(blankSideLayout)
   slide.shapes.title.text = "sample title"
   slide.placeholders[2].text = "Sample Sub Title" 

   # 读取图片原始宽高
   with Image(filename=path) as img:
       orig_width, orig_height = img.width, img.height
   # 计算缩放比例,取最小值保证图片不超出边界
   width_scale = MAX_PIC_WIDTH / orig_width
   height_scale = MAX_PIC_HEIGHT / orig_height
   actual_scale = min(width_scale, height_scale)
   # 计算实际插入的宽高
   actual_width = orig_width * actual_scale
   actual_height = orig_height * actual_scale

   # 传入计算好的宽高插入图片
   slide.shapes.add_picture(path, Inches(1), Inches(3), width=actual_width, height=actual_height)
   prs.save("slides.pptx")

logoImg = Image(filename='logo.jpg')
logoImg.transparentize(0.33)
  
img = Image(filename='img.jpg')
img.composite_channel("all_channels",logoImg,"dissolve",20,20)
img.save(filename='imgwatermark.jpg')

makePPTX('imgwatermark.jpg')

效果说明

调整MAX_PIC_WIDTH和MAX_PIC_HEIGHT的数值即可自定义图片的最大展示区域,缩放后的图片会完整保留原始比例,不会出现拉伸变形,和预期输出效果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:45:01