Python Pillow 简明教程

Python Pillow - Compositing Images

What is compositing Image?

在 Pillow 中合成图像涉及组合两幅或多幅图像以创建一幅新图像。此过程通常包括根据透明度或特定混合模式等特定条件混合一幅图像的像素值与另一幅图像的像素值。

Pillow 提供 Image.alpha_composite() 方法来合成图像,尤其是在处理 alpha(透明度)通道时。它通常用于将一幅图像叠加到另一幅图像上以添加水印或创建特殊效果。

以下是与在 Pillow 中合成图像有关的关键概念:

Image Composition

  1. 通过将一幅图像叠加到另一幅图像上,组合图像以创建一幅新图像。

  2. 图像合成分解通常用于添加水印或创建特殊效果。

Alpha Channel

  1. alpha通道表示图像中每个像素的透明度。

  2. 带有 alpha 通道的图像可以更加无缝地合成,从而实现平滑混合。

The Image.alpha_composite() Method

Pillow 中的 Image.alpha_composite() 方法用于利用其 alpha 通道对两幅图像进行合成。它将两个 Image 对象作为输入,并返回带有合成的结果的新 Image

以下是 Image.alpha_composite() 方法的语法和参数−

PIL.Image.alpha_composite(image1, image2)

其中,

  1. image1 − 背景图像,将第二个图像合成到该图像上。

  2. image2 − 前景图像,将合成到背景上。

Example

此示例演示如何使用 Image.alpha_composite() 方法合成两幅图像。

from PIL import Image

#Open or create the background image
background = Image.open("Images/decore.png")

#Open or create the foreground image with transparency
foreground = Image.open("Images/library_banner.png")

#Ensure that both images have the same size
if background.size != foreground.size:
    foreground = foreground.resize(background.size)

#Perform alpha compositing
result = Image.alpha_composite(background, foreground)

# Display the resulting image
result.show()
decore
library banner
composite image

Adding Watermarks Using Compositing Images

给图像添加水印是图像合成任务中的一种应用。您可以将水印覆盖到图像的特定位置,并应用透明度。这可以通过为水印创建新图层并使用 Image.alpha_composite() 方法将其与基本图像混合来实现。

Example

此示例演示如何使用 Image.alpha_composite() 方法将水印添加到图像上。水印图像将放置在基本图像上,并可以调整透明度。

from PIL import Image

# Load the images and convert them to RGBA
image = Image.open('Images/yellow_car.jpg').convert('RGBA')
watermark = Image.open('Images/reading_img2.png').convert('RGBA')

# Create an empty RGBA layer with the same size as the image
layer = Image.new('RGBA', image.size, (0, 0, 0, 0))
layer.paste(watermark, (20, 20))

# Create a copy of the layer and adjust the alpha transparency
layer2 = layer.copy()
layer2.putalpha(128)

# Merge the layer with its transparent copy using the alpha mask
layer.paste(layer2, (0, 0), layer2)

# Composite the original image with the watermark layer
result = Image.alpha_composite(image, layer)

# Display the resulting image
result.show()
yellow car
reading img2
composite 2