1. 準備工作
載入要結合的圖片
在開始處理多張圖片之前,需要先將它們載入。Pillow 支援大多數常見的圖片格式,例如 JPEG、PNG、BMP 和 GIF。
from PIL import Image
# 載入圖片
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")
這裡我們載入了兩張圖片:背景圖片和要疊加的圖片。需要注意的是,對於某些方法,兩張圖片的大小必須相同。
2. 疊加圖片
方法 paste()
方法 paste()
可以將一張圖片插入到另一張圖片的指定座標之上。如果要疊加圖片或創建拼貼效果,這個方法非常有用。
# 將前景圖片的大小調整為與背景大小相符
foreground = foreground.resize(background.size)
# 將圖片疊加到背景上
background.paste(foreground, (50, 50)) # 將 foreground 插入到座標 (50, 50)
# 保存結果
background.save("pasted_image.jpg")
這裡圖片 foreground
被插入到 background
上,起始點為 (50, 50)
。如果前景圖片超出了背景的邊界,則會被部分裁剪。
使用帶有遮罩的 paste()
方法 paste()
也支援遮罩 (mask),可以部分插入圖片,保留其透明區域。遮罩必須是 L
(灰階模式) 或 RGBA
模式。
# 創建遮罩
mask = Image.open("mask.png").convert("L") # 將遮罩轉換為灰階模式
# 使用遮罩插入圖片
background.paste(foreground, (50, 50), mask=mask)
background.save("pasted_with_mask.jpg")
遮罩 mask.png
決定了圖片 foreground
哪些部分可以顯示,方便地將一張圖片精確疊加到另一張圖片上。
3. 混合圖片
方法 blend()
方法 blend()
可以混合兩張圖片,並設定透明度。這個方法會創建一個新的圖片對象,表示兩張原始圖片的混合效果。要使用 blend()
,兩張圖片的大小必須相同。
簡單混合圖片
# 將圖片大小調整成相同大小
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
# 設定透明度混合圖片
blended_image = Image.blend(background, foreground, alpha=0.5)
# 保存結果
blended_image.save("blended_image.jpg")
參數 alpha
決定了圖片 foreground
的透明度。如果 alpha = 0.5
,兩張圖片各佔一半。值 alpha = 0.0
使前景圖片完全透明(只顯示背景圖片),而 alpha = 1.0
則使背景圖片完全透明(只顯示前景圖片)。
4. 使用遮罩進行圖片合成
方法 composite()
方法 composite()
可以根據遮罩將兩張圖片合成,決定最終圖片的哪些部分顯示哪張圖片。這個方法對創建複雜的合成圖片和精確疊加非常有用。
範例:使用 composite()
結合圖片
# 確保圖片與遮罩具有相同的大小
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
mask = mask.resize((500, 500))
# 使用遮罩創建合成圖片
composited_image = Image.composite(foreground, background, mask)
# 保存圖片
composited_image.save("composited_image.jpg")
遮罩決定了最終圖片中,由 foreground
和 background
顯示的部分。遮罩的白色區域顯示 foreground
,黑色區域顯示 background
。
5. 範例
結合使用 paste()
, blend()
和 composite()
方法的範例
現在我們結合這些方法,創建更複雜的合成。例如,我們有一個背景圖片、一張半透明的圖片和一個遮罩。
from PIL import Image
# 載入圖片
background = Image.open("background.jpg").resize((500, 500))
foreground = Image.open("foreground.png").resize((500, 500))
mask = Image.open("mask.png").convert("L").resize((500, 500))
# 1. 帶透明度地混合背景和前景
blended_image = Image.blend(background, foreground, alpha=0.3)
# 2. 使用遮罩將圖片合成到最終圖片
final_composite = Image.composite(foreground, blended_image, mask)
# 保存最終結果
final_composite.save("final_composition.jpg")
這個範例展示了如何逐步使用 blend()
和 composite()
創建多層合成圖片。
圖片合成方法的實際應用
- 創建拼貼: 方法
paste()
可以將多張圖片添加到一個畫布上,創建拼貼和馬賽克圖片。 - 疊加效果與透明度: 方法
blend()
可以創建圖片之間的柔和過渡,非常適合照片編輯和特效製作。 - 帶遮罩的合成: 方法
composite()
允許精確控制最終圖片中顯示的部分,並通過遮罩創建複雜的合成。
方法比較
方法 | 描述 | 應用 |
---|---|---|
paste() |
將一張圖片疊加到另一張圖片上 | 拼貼,將一張圖片放置於另一張之上 |
blend() |
設定透明度混合兩張圖片 | 柔和過渡和疊加效果 |
composite() |
根據遮罩合成兩張圖片 | 精確控制的複雜合成 |
GO TO FULL VERSION