CodeGym /课程 /Python SELF ZH /图像合并与组合

图像合并与组合

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