如何使用 PIL 合并透明 PNG 图片与其他图片?


在图像处理领域,合并两张或更多图像是一个常见的操作。一个常见的用例是将透明的 PNG 图片与另一张图片合并,以创建包含这两张图片的合成图片。

在本文中,我们将学习如何使用 PIL 合并透明 PNG 图片与另一张图片。PIL 是一个功能强大的 Python 图像处理库。它提供了一系列用于打开、操作和保存不同类型图像文件的函数。该库兼容各种图像格式,包括 JPEG、PNG、BMP、GIF 和 TIFF。

为了使用 PIL 合并透明 PNG 图片与另一张图片,我们需要执行以下步骤:

  • 使用 Image.open() 函数将两张图片加载到 PIL 中。

  • 创建一个与背景图片大小相同的新图片。

  • 使用 paste() 函数将背景图片粘贴到新图片上。

  • 使用 paste() 函数将前景图片粘贴到新图片上,但使用一个掩码来指示哪些像素应该是透明的。

  • 使用 save() 函数将合并后的图片保存到文件中。

现在让我们详细了解一下如何逐步使用 PIL 合并透明 PNG 图片与另一张图片。

步骤 1:将图片加载到 PIL 中

第一步是将背景图片和透明的 PNG 图片加载到 PIL 中。我们可以使用 Image.open() 函数来实现,该函数将图片的文件名作为参数。例如,要加载名为“background.jpg”的背景图片和名为“foreground.png”的透明 PNG 图片,我们可以使用以下代码:

from PIL import Image
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")

步骤 2:创建一个与背景图片大小相同的新图片

接下来,我们需要创建一个与背景图片大小相同的新图片。我们可以通过调用 Image.new() 函数并传入背景图片的大小来实现。例如,如果背景图片是 800x600 像素,我们可以创建一个相同大小的新图片,如下所示:

merged_image = Image.new("RGBA", background.size)

步骤 3:将背景图片粘贴到新图片上

现在我们可以使用 paste() 函数将背景图片粘贴到新图片上。此函数接受以下参数:

  • 要粘贴的图片(在本例中为背景图片)。

  • 粘贴图片的位置(指定为 (x, y) 元组)。

  • 一个可选的掩码,可用于控制粘贴图片的透明度。

例如,要将背景图片粘贴到新图片的左上角,我们可以使用以下代码:

merged_image.paste(background, (0, 0)

步骤 4:使用掩码将前景图片粘贴到新图片上

现在我们需要将透明的 PNG 图片粘贴到新图片上,但使用一个掩码来指示哪些像素应该是透明的。我们可以使用 split() 函数从前景图片的 alpha 通道创建掩码,如下所示:

_, _, _, mask = foreground.split()

步骤 5:将合并后的图片保存到文件中

最后,我们可以使用 save() 函数将合并后的图片保存到文件中。我们可以使用适当的参数指定文件名和文件格式。例如,要将合并后的图片保存为名为“merged.jpg”的 JPEG 文件,我们可以使用以下代码:

merged_image.save("merged.jpg", "JPEG")

示例

将透明 PNG 图片与 JPEG 背景图片合并

在下面的示例中,我们使用 Python 中的 PIL 库将透明 PNG 图片与 JPEG 背景图片合并。它包括将图片加载到 PIL 中,创建一个与背景图片大小相同的新图片,将背景图片粘贴到新图片上,从前景图片的 alpha 通道创建掩码,并将前景图片与掩码一起粘贴到新图片上。最后,合并后的图片被保存到文件中。

# import PIL module
from PIL import Image
# Load the images
myBackgroundImage = Image.open("yourbackground.jpg")
myForegroundImage = Image.open("yourforeground.png")
# Create a new image with the same size as the background image
myMerged_image = Image.new("RGBA", myBackgroundImage.size)
# Paste the background image onto the new image
myMerged_image.paste(myBackgroundImage, (0, 0))
# Create a mask from the alpha channel of the foreground image
_, _, _, mask = myForegroundImage.split()
# Paste the foreground image onto the new image with the mask
myMerged_image.paste(myForegroundImage, (0, 0), mask)
# Saving the merged image to a file
myMerged_image.save("yourmerged.jpg", "JPEG"

输出

输入图片

输出图片

示例

合并多个透明 PNG 图片

在下面的示例中,我们使用 Python 中的 PIL 库合并了多个透明 PNG 图片。它包括将图片加载到 PIL 中,创建一个与背景图片大小相同的新图片,将背景图片粘贴到新图片上,从每个前景图片的 alpha 通道创建掩码,并将每个前景图片与其相应的掩码一起粘贴到新图片上。最后,合并后的图片被保存到文件中。

# import PIL module
from PIL import Image

# Loading the images
myBackgroundImage = Image.open("yourbackground.jpg")
myForegroundImage1 = Image.open("yourforeground1.png")
myForegroundImage2 = Image.open("yourforeground2.png")

# Create a new image with the same size as the background image
myMerged_image = Image.new("RGBA", myBackgroundImage.size)

# Paste the background image onto the new image
myMerged_image.paste(myBackgroundImage, (0, 0))

# Create a mask from the alpha channel of the foreground image
_, _, _, mask1 = myForegroundImage1.split()
_, _, _, mask2 = myForegroundImage2.split()

# Paste the foreground image onto the new image with the mask
myMerged_image.paste(myForegroundImage1, (0, 0), mask1)
myMerged_image.paste(myForegroundImage2, (0, 0), mask2)

# Saving the merged image to a file
myMerged_image.save("yourmerged.png", "PNG")

输出

输入图片

输出图片

结论

将透明 PNG 图片与另一张图片合并是图像处理中的一项常见任务。在本文中,我们学习了如何使用 Python 图像库 (PIL) 将透明 PNG 图片与背景图片合并。我们介绍了将图片加载到 PIL 中、创建与背景图片大小相同的新图片、将背景图片粘贴到新图片上、从前景图片的 alpha 通道创建掩码、将前景图片与掩码一起粘贴到新图片上以及将合并后的图片保存到文件的步骤。使用这些技巧,您可以创建复杂的合成图片,这些图片组合了多个具有透明度的图片。

更新于: 2023-08-31

2K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.