博客
关于我
Python合并两张图片 | 先叠透明度再合并 (附Demo)
阅读量:798 次
发布时间:2023-03-07

本文共 3005 字,大约阅读时间需要 10 分钟。

使用Pillow库处理图像

Pillow库是Python中处理图像的强大工具,它支持多种图像格式,包括PNG、JPEG等。以下是使用Pillow库合并两张图片的详细教程。

以下代码示范了如何将两张图片以透明的方式合并:

from PIL import Image
def merge_images_with_transparency(image1_path, image2_path, output_path, position=(0, 0), transparency=0.5):
# 打开并转换为RGBA格式
image1 = Image.open(image1_path).convert("RGBA")
image2 = Image.open(image2_path).convert("RGBA")
# 确保第二张图片不超出第一张图片的范围
if (position[0] + image2.width > image1.width) or (position[1] + image2.height > image1.height):
raise ValueError("第二张图片超出了第一张图片的范围")
# 将第二张图片调整为与第一张相同的大小
image2 = image2.resize(image1.size)
# 创建一个与第一张图片大小相同的透明度数组
overlay = Image.new("RGBA", image1.size, (0, 0, 0, 0))
# 修改第二张图片的透明度并叠加到透明度数组中
new_image2 = Image.new("RGBA", image2.size)
for x in range(image2.width):
for y in range(image2.height):
r, g, b, a = image2.getpixel((x, y))
new_image2.putpixel((x, y), (r, g, b, int(transparency * a)))
# 将第二张图片叠加到透明度数组中
overlay.paste(image2, position, image2)
# 使用透明度合并两张图片
merged_image = Image.alpha_composite(image1, new_image2)
# 保存合并后的图片
merged_image.save(output_path)
if __name__ == "__main__":
image1_path = "image1.jpg"
image2_path = "image2.jpg"
output_path = "merged_image_with_transparency.png"
# 调用函数合并图片,position参数可以调整第二张图片在第一张图片上的位置
merge_images_with_transparency(image1_path, image2_path, output_path, position=(100, 100), transparency=0.5)

以下是使用上述代码后的结果:

通过上面的代码可以看出,先叠加再修改透明度的效果与先修改透明度再叠加的效果有一定的差异,具体效果取决于最终想要的呈现方式。

以下是修改后代码的另一种实现方式:

from PIL import Image
def merge_images_with_transparency(image1_path, image2_path, output_path, position=(0, 0), transparency=0.5):
# 打开并转换为RGBA格式
image1 = Image.open(image1_path).convert("RGBA")
image2 = Image.open(image2_path).convert("RGBA")
# 确保第二张图片不超出第一张图片的范围
if (position[0] + image2.width > image1.width) or (position[1] + image2.height > image1.height):
raise ValueError("第二张图片超出了第一张图片的范围")
# 将第二张图片调整为与第一张相同的大小
image2 = image2.resize(image1.size)
# 创建一个与第一张图片大小相同的透明度数组
overlay = Image.new("RGBA", image1.size, (0, 0, 0, 0))
# 修改第二张图片的透明度并叠加到透明度数组中
new_image2 = Image.new("RGBA", image2.size)
for x in range(image2.width):
for y in range(image2.height):
r, g, b, a = image2.getpixel((x, y))
new_image2.putpixel((x, y), (r, g, b, int(transparency * a)))
# 将第一张图片叠加到透明度数组中
overlay.paste(image1, position, image1)
# 使用透明度合并两张图片
merged_image = Image.alpha_composite(overlay, new_image2)
# 保存合并后的图片
merged_image.save(output_path)
if __name__ == "__main__":
image1_path = "image1.jpg"
image2_path = "image2.jpg"
output_path = "merged_image_with_transparency.png"
# 调用函数合并图片,position参数可以调整第二张图片在第一张图片上的位置
merge_images_with_transparency(image1_path, image2_path, output_path, position=(100, 100), transparency=0.5)

这种方法的效果是将第一张图片作为背景,第二张图片以指定位置和透明度叠加在上面。

转载地址:http://pqofk.baihongyu.com/

你可能感兴趣的文章