Python實現(xiàn)多圖片格式(PNG/JPG/SVG)到幻燈片的批量轉(zhuǎn)換
引言
在制作演示文稿時,想必大家常常需要將各種格式的圖片插入到 PPT 中。雖然手動操作不算難,但如果要處理大量的圖片,任務(wù)就變得非常繁瑣了。而借助 Python,我們可以輕松實現(xiàn)將圖片批量轉(zhuǎn)換為 PPT 幻燈片。
這篇文章將詳細介紹如何使用 Python 將各種圖片轉(zhuǎn)換為 PPT 幻燈片,甚至批量處理多個圖片,同時確保圖片質(zhì)量不受損。
本文主要涵蓋的內(nèi)容如下:
- 將單張 PNG 或 JPG 圖片轉(zhuǎn)換為 PPT 幻燈片,并保持圖片的原始大小
- 自定義幻燈片的大小和圖片的位置
- 批量將多個 PNG 或 JPG 圖片轉(zhuǎn)換為獨立的幻燈片
- 自定義每張幻燈片上的圖片數(shù)量
- 將 SVG 圖片轉(zhuǎn)換為可編輯的 PPT 形狀
安裝必要的庫
要使用 Python 將圖片轉(zhuǎn)換為 PPT,需要安裝一個支持處理演示文稿的庫。本文使用 Spire.Presentation for Python,該庫支持生成PPT文檔以及對PPT文檔進行多種操作,包括插入圖片,調(diào)整幻燈片大小,將PPT文檔保存為PDF、圖片格式等,而且不需要運行環(huán)境安裝 Microsoft PowerPoint。
安裝方法
在程序終端中運行以下命令,即可安裝該庫:
pip install Spire.Presentation
安裝完成后,就可以使用該庫提供的接口來實現(xiàn)各種圖片轉(zhuǎn)PPT需求了。
1. 將單個 PNG 或 JPG 圖片轉(zhuǎn)換為 PPT 幻燈片
1.1 生成與圖片尺寸匹配的幻燈片
將圖片轉(zhuǎn)換為 PPT 幻燈片時,保持圖片的原始分辨率和比例非常重要。為了避免圖片被拉伸或失真,我們可以通過設(shè)置幻燈片的尺寸與圖片尺寸一致來實現(xiàn)這一點。
代碼示例:
from spire.presentation import *
# 創(chuàng)建 PPT 演示文稿對象
presentation = Presentation()
# 刪除默認幻燈片
presentation.Slides.RemoveAt(0)
# 加載圖片
imagePath = r"C:\Users\Administrator\Downloads\Images\1.png"
stream = Stream(imagePath)
imageData = presentation.Images.AppendStream(stream)
stream.Close()
# 獲取圖片尺寸
imageWidth = float(imageData.Width)
imageHeight = float(imageData.Height)
# 設(shè)置幻燈片尺寸與圖片一致
presentation.SlideSize.Type = SlideSizeType.Custom
presentation.SlideSize.Size = SizeF(imageWidth, imageHeight)
# 添加新幻燈片
slide = presentation.Slides.Append()
# 插入圖片
rect = RectangleF(0.0, 0.0, imageWidth, imageHeight)
pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
pptImage.Line.FillType = FillFormatType.none
# 保存演示文稿
presentation.SaveToFile("單張圖片轉(zhuǎn)PPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()輸出效果:
圖片填滿整個幻燈片,且保持原始尺寸和比例:

1.2 自定義幻燈片大小和圖片位置
在某些情況下,你可能希望使用固定的幻燈片大?。ㄈ?16:9 寬屏或 A4 比例),而不是完全匹配圖片的尺寸。這種方法有助于保持演示文稿的統(tǒng)一風(fēng)格。同時你還可以控制圖片的位置,例如,將圖片居中或放在指定的邊距內(nèi)。
以下示例展示了如何:
- 設(shè)置固定的幻燈片大小
- 在圖片周圍添加邊距
- 將圖片居中顯示
代碼示例:
from spire.presentation import *
# 創(chuàng)建新的 PowerPoint 演示文稿
presentation = Presentation()
# 刪除默認的第一張幻燈片
presentation.Slides.RemoveAt(0)
# 加載圖片
imagePath = r"C:\Users\Administrator\Downloads\Images\1.png"
stream = Stream(imagePath)
imageData = presentation.Images.AppendStream(stream)
stream.Close()
# 設(shè)置標準的 16:9 寬屏幻燈片尺寸
presentation.SlideSize.Type = SlideSizeType.Screen16x9
slide = presentation.Slides.Append()
# 獲取幻燈片和圖片的尺寸
slideWidth = presentation.SlideSize.Size.Width
slideHeight = presentation.SlideSize.Size.Height
imgWidth = float(imageData.Width)
imgHeight = float(imageData.Height)
# 設(shè)置邊距
margin = 30.0
# 按比例縮放圖片以適應(yīng)幻燈片邊距
scale = min((slideWidth - 2 * margin) / imgWidth, (slideHeight - 2 * margin) / imgHeight)
scaledWidth = imgWidth * scale
scaledHeight = imgHeight * scale
# 將圖片居中顯示
x = (slideWidth - scaledWidth) / 2
y = (slideHeight - scaledHeight) / 2
# 插入圖片
rect = RectangleF(x, y, scaledWidth, scaledHeight)
pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
pptImage.Line.FillType = FillFormatType.none
# 保存演示文稿
presentation.SaveToFile("自定義幻燈片大小和圖片位置.pptx", FileFormat.Pptx2013)
presentation.Dispose()輸出效果:
圖片被按比例縮放并居中顯示,同時保持幻燈片的 16:9 寬屏比例,且圖片與幻燈片邊緣保持一定的邊距。

2. 批量將多張 PNG 或 JPG 圖片轉(zhuǎn)換為 PPT 幻燈片
2.1 為每張圖片生成單獨的幻燈片
如果你有多張 PNG 或 JPG 圖片(如產(chǎn)品照片或掃描文檔頁面),你可以批量將它們自動轉(zhuǎn)換為 PPT,每張圖片對應(yīng)一張幻燈片,且每張幻燈片的尺寸自動與圖片的尺寸匹配,確保圖片保留原始比例。
代碼示例:
import os
from spire.presentation import *
# 創(chuàng)建新的 PowerPoint 演示文稿
presentation = Presentation()
# 刪除默認的幻燈片
presentation.Slides.RemoveAt(0)
# 定義圖片文件夾路徑
baseDir = r"C:\Users\Administrator\Downloads\Images"
# 獲取文件夾中的所有圖片文件
picFiles = [f for f in os.listdir(baseDir) if os.path.isfile(os.path.join(baseDir, f))]
# 遍歷所有圖片文件
for picFile in picFiles:
# 添加新幻燈片
slide = presentation.Slides.Append()
# 加載圖片
imagePath = os.path.join(baseDir, picFile)
stream = Stream(imagePath)
imageData = presentation.Images.AppendStream(stream)
stream.Close()
# 設(shè)置幻燈片尺寸與圖片尺寸匹配
imageWidth = float(imageData.Width)
imageHeight = float(imageData.Height)
presentation.SlideSize.Type = SlideSizeType.Custom
presentation.SlideSize.Size = SizeF(imageWidth, imageHeight)
# 插入圖片
rect = RectangleF(0.0, 0.0, imageWidth, imageHeight)
pptImage = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
pptImage.Line.FillType = FillFormatType.none
# 保存演示文稿
presentation.SaveToFile("MultipleImagesToPPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()輸出效果:
最終生成的 PPT文件包含多個幻燈片,每張幻燈片顯示一張圖片。

2.2 自定義每頁幻燈片中的圖片數(shù)量
在實際使用場景中,你可能需要將多張圖片添加到單個幻燈片中,以便高效地比較或展示圖片數(shù)據(jù)。要實現(xiàn)這一點,我們可以將幻燈片劃分為網(wǎng)格,然后將圖片放置在相應(yīng)的網(wǎng)格單元格中。
例如:
- 每頁 2 張圖片:劃分為一個簡單的 1x2 網(wǎng)格(兩張圖片并排排列)。
- 每頁 4 張圖片:劃分為一個 2x2 網(wǎng)格(四張圖片排列成兩行兩列)。
- 每頁 6 張圖片:劃分為一個 2x3 網(wǎng)格(六張圖片排列成兩行三列)。
根據(jù)每頁要顯示的圖片數(shù)量,動態(tài)調(diào)整網(wǎng)格布局,這樣可以確保圖片均勻分布,布局整潔且一致。
代碼示例
以下示例展示了如何將每個幻燈片劃分為網(wǎng)格,并根據(jù)每頁幻燈片的圖片數(shù)量(例如 2張或4張)將圖片放置到每個網(wǎng)格單元格中。圖片會自動縮放以適應(yīng)分配的單元格,并且幻燈片的布局會相應(yīng)調(diào)整。
import os
from spire.presentation import *
def add_images_to_slide(slide, image_files, images_per_slide, slide_width, slide_height, margin=20.0):
"""
該函數(shù)根據(jù)指定的網(wǎng)格布局(例如每頁 2 張、4 張或更多圖片)將圖片添加到幻燈片。
"""
# 計算網(wǎng)格的行數(shù)和列數(shù)
columns = int(images_per_slide ** 0.5) # 列數(shù)(每頁圖片數(shù)量的平方根)
rows = (images_per_slide + columns - 1) // columns # 計算行數(shù)
# 計算每個圖片的寬度和高度
cell_width = (slide_width - 2 * margin) / columns
cell_height = (slide_height - 2 * margin) / rows
# 遍歷圖片并將它們放置到網(wǎng)格中
for i in range(images_per_slide):
if i >= len(image_files):
break # 防止超出可用圖片的數(shù)量
# 加載圖片
image_path = os.path.join(baseDir, image_files[i])
stream = Stream(image_path)
image_data = presentation.Images.AppendStream(stream)
stream.Close()
# 獲取圖片的尺寸
image_width = float(image_data.Width)
image_height = float(image_data.Height)
# 縮放圖片以適應(yīng)單元格
scale = min(cell_width / image_width, cell_height / image_height)
scaled_width = image_width * scale
scaled_height = image_height * scale
# 計算圖片在網(wǎng)格中的位置(x, y)
row = i // columns
col = i % columns
x = margin + col * cell_width + (cell_width - scaled_width) / 2 # 在單元格中水平居中
y = margin + row * cell_height + (cell_height - scaled_height) / 2 # 在單元格中垂直居中
# 插入圖片
rect = RectangleF(x, y, scaled_width, scaled_height)
ppt_image = slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, image_data, rect)
ppt_image.Line.FillType = FillFormatType.none
# 創(chuàng)建一個新的演示文稿
presentation = Presentation()
# 刪除默認幻燈片
presentation.Slides.RemoveAt(0)
# 定義圖片文件夾路徑
baseDir = r"C:\Users\Administrator\Downloads\Images"
# 獲取文件夾中的所有文件
image_files = [f for f in os.listdir(baseDir) if os.path.isfile(os.path.join(baseDir, f))]
# 定義每頁幻燈片中圖片的數(shù)量(2、4、6 等)
images_per_slide = 4 # 可以根據(jù)需要調(diào)整此值為 2、4、6 等
# 遍歷圖片并將它們添加到幻燈片中
for i in range(0, len(image_files), images_per_slide):
# 添加新的幻燈片
slide = presentation.Slides.Append()
# 獲取本頁幻燈片的圖片
add_images_to_slide(slide, image_files[i:i + images_per_slide], images_per_slide,
presentation.SlideSize.Size.Width, presentation.SlideSize.Size.Height)
# 保存演示文稿
presentation.SaveToFile("MultipleImagesPerSlide.pptx", FileFormat.Pptx2013)
presentation.Dispose()輸出效果:
生成的 PPT 幻燈片根據(jù)圖片數(shù)量劃分為相應(yīng)的網(wǎng)格布局。每個網(wǎng)格中將放置一張圖片,且圖片自動縮放以適應(yīng)網(wǎng)格尺寸:

關(guān)于行數(shù)和列數(shù)計算方法說明:
1. 列數(shù) (columns) 計算方法:
columns = int(images_per_slide ** 0.5)
這里使用了平方根 images_per_slide ** 0.5,是因為如果每一列的數(shù)量相等,形成一個近似的正方形布局,平方根可以給出合適的列數(shù)。例如:
如果每張幻燈片有 4 張圖片,sqrt(4) = 2,那么可以采用 2 列 2 行的布局。
如果有 6 張圖片,sqrt(6) 約等于 2.45,所以 int(2.45) 將列數(shù)取為 2。
2. 行數(shù) (rows) 計算方法:
rows = (images_per_slide + columns - 1) // columns
這行代碼計算所需的行數(shù)。公式 (images_per_slide + columns - 1) // columns 之所以這樣設(shè)計,是為了確保足夠的行數(shù):
images_per_slide 是總的圖片數(shù)量。
columns 是已計算出的列數(shù)。
+ columns - 1 是為了向上取整,從而避免因整除導(dǎo)致圖片數(shù)量不足的情況。例如:
如果有 6 張圖片,columns 為 2,計算行數(shù)時:
rows = (6 + 2 - 1) // 2 = 7 // 2 = 3,實際上只需要 3 行來放置圖片。
3. 將 SVG 圖片轉(zhuǎn)換為可編輯的PPT形狀
與 PNG 和 JPG 等位圖格式不同,SVG 文件是矢量圖,因此它可以在不失真的情況下無限放大。在 PowerPoint 中,我們可以將 SVG 圖片作為可編輯的形狀插入,保留其清晰度并且能夠隨時進行修改(如組合、設(shè)置顏色、調(diào)整大小等)。
代碼示例:
from spire.presentation import *
# 創(chuàng)建 PowerPoint 演示文稿對象
presentation = Presentation()
# 定義 SVG 文件路徑
SvgFile = r"C:\Users\Administrator\Downloads\Images\Sample.svg"
# 將 SVG 文件插入為可編輯的 PowerPoint 形狀
presentation.Slides[0].Shapes.AddFromSVGAsPicture(SvgFile)
# 保存演示文稿
presentation.SaveToFile("SVG轉(zhuǎn)PPT.pptx", FileFormat.Pptx2013)
presentation.Dispose()總結(jié)
本文詳細介紹了如何使用 Python 將不同格式的圖片,如 PNG、JPG 和 SVG, 批量轉(zhuǎn)換為 PPT 幻燈片。文章涵蓋了以下幾個關(guān)鍵點:
- 單張圖片轉(zhuǎn)換:將單張 PNG 或 JPG 圖片轉(zhuǎn)換為 PPT 幻燈片,保持圖片原始大小,或自定義幻燈片的尺寸和圖片位置。
- 批量轉(zhuǎn)換:批量將多張 PNG 或 JPG 圖片轉(zhuǎn)換為多個幻燈片,并根據(jù)需要調(diào)整每張幻燈片上圖片的數(shù)量,例如按網(wǎng)格布局排列。
- SVG 轉(zhuǎn)換:將 SVG 文件轉(zhuǎn)換為 PowerPoint 可編輯的圖形,保留圖片的高質(zhì)量和可編輯性。
到此這篇關(guān)于Python實現(xiàn)多圖片格式(PNG/JPG/SVG)到幻燈片的批量轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Python圖片轉(zhuǎn)PPT內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python利用pandas分析學(xué)生期末成績實例代碼
pandas是數(shù)據(jù)分析師最常用的工具之一,這篇文章主要給大家介紹了關(guān)于python如何利用pandas分析學(xué)生期末成績的相關(guān)資料,文中給出了詳細的實現(xiàn)方法,需要的朋友可以參考下2021-07-07
Python爬蟲實例_利用百度地圖API批量獲取城市所有的POI點
下面小編就為大家分享一篇Python爬蟲實例_利用百度地圖API批量獲取城市所有的POI點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
python GUI庫圖形界面開發(fā)之PyQt5切換按鈕控件QPushButton詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5切換按鈕控件QPushButton詳細使用方法與實例,需要的朋友可以參考下2020-02-02
Python3利用SMTP協(xié)議發(fā)送E-mail電子郵件的方法
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。下面這篇文章主要給大家介紹了關(guān)于Python3如何利用SMTP協(xié)議發(fā)送E-mail電子郵件的方法,需要的朋友可以參考下。2017-09-09
使用Python實現(xiàn)將PDF轉(zhuǎn)為PDF/A和PDF/X
PDF/A和PDF/X是兩種有特定用途的PDF格式,本文主要介紹了如何使用Python將PDF轉(zhuǎn)換為PDF/A和PDF/X,以及如何將PDF/A格式轉(zhuǎn)換回標準的PDF格式,需要的可以參考下2024-04-04
用Python獲取攝像頭并實時控制人臉的實現(xiàn)示例
這篇文章主要介紹了用Python獲取攝像頭并實時控制人臉的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

