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()
方法还支持蒙版,可以部分叠加图像,同时保留其透明区域。蒙版必须是 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
使 foreground
完全透明(仅显示背景),而 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