博客
关于我
Python合并两张图片 | 先叠透明度再合并 (附Demo)
阅读量:797 次
发布时间: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/

你可能感兴趣的文章
Python FileDialog获取文件夹路径不是文件
查看>>
python filter过滤器的使用_python基础知识分享:zip()、filter函数和reduce如何使用?...
查看>>
python flask 请求code 400, message Bad request version
查看>>
Python UI自动化测试集成UnitTest
查看>>
Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移)
查看>>
python valueerror object2_python遇到错误记录
查看>>
python vars的作用
查看>>
Python virtualenv
查看>>
python vue3实现大文件分段续传(断点续传)--带暂停和继续功能
查看>>
Python WebDriver如何打印整个页面源(html)
查看>>
Python WebSocket自动化测试:构建高效接口测试框架
查看>>
Python Web开发
查看>>
Redis 配置文件杂项。
查看>>
Python web自动化测试 —— 文件上传
查看>>
Python web自动化测试 —— 文件上传!
查看>>
Python Web自动化测试开发环境搭建(附安装包与虚拟机环境)
查看>>
python win32api键盘_Python win32api.keybd_event模拟键盘输入
查看>>
python Windows显示当前鼠标坐标
查看>>
python Workbook 表格宽度
查看>>
python | flanker,一个神奇的 Python 库!
查看>>