CodeGym /Adesua ahorow /Python SELF TW /合併與結合圖片

合併與結合圖片

Python SELF TW
等級 45 , 課堂 3
開放

1. 準備工作

載入要結合的圖片

在開始處理多張圖片之前,需要先將它們載入。Pillow 支援大多數常見的圖片格式,例如 JPEG、PNG、BMP 和 GIF。

Python

from PIL import Image

# 載入圖片
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")

這裡我們載入了兩張圖片:背景圖片和要疊加的圖片。需要注意的是,對於某些方法,兩張圖片的大小必須相同。

2. 疊加圖片

方法 paste()

方法 paste() 可以將一張圖片插入到另一張圖片的指定座標之上。如果要疊加圖片或創建拼貼效果,這個方法非常有用。

Python

# 將前景圖片的大小調整為與背景大小相符
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 模式。

Python

# 創建遮罩
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(),兩張圖片的大小必須相同。

簡單混合圖片

Python

# 將圖片大小調整成相同大小
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() 結合圖片

Python

# 確保圖片與遮罩具有相同的大小
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")

遮罩決定了最終圖片中,由 foregroundbackground 顯示的部分。遮罩的白色區域顯示 foreground,黑色區域顯示 background

5. 範例

結合使用 paste(), blend()composite() 方法的範例

現在我們結合這些方法,創建更複雜的合成。例如,我們有一個背景圖片、一張半透明的圖片和一個遮罩。

Python

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() 創建多層合成圖片。

圖片合成方法的實際應用

  1. 創建拼貼: 方法 paste() 可以將多張圖片添加到一個畫布上,創建拼貼和馬賽克圖片。
  2. 疊加效果與透明度: 方法 blend() 可以創建圖片之間的柔和過渡,非常適合照片編輯和特效製作。
  3. 帶遮罩的合成: 方法 composite() 允許精確控制最終圖片中顯示的部分,並通過遮罩創建複雜的合成。

方法比較

方法 描述 應用
paste() 將一張圖片疊加到另一張圖片上 拼貼,將一張圖片放置於另一張之上
blend() 設定透明度混合兩張圖片 柔和過渡和疊加效果
composite() 根據遮罩合成兩張圖片 精確控制的複雜合成
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION