如何用Python PIL将图片粘贴到另一图底部并保留透明像素与圆角
用Python Pillow实现渐变图与背景图的复合(保留透明和圆角)
核心思路
要实现需求,关键是利用背景图的Alpha通道作为蒙版,确保渐变只在背景图的非透明区域显示,同时通过alpha_composite或带蒙版的paste来保留原背景的透明和圆角。
具体实现代码
from PIL import Image # 1. 加载图片(替换为你的本地文件路径) bg_img = Image.open("bg.png").convert("RGBA") gradient_img = Image.open("gradient.png").convert("RGBA") # 2. 调整渐变图尺寸:宽度匹配背景图,高度保持原渐变图高度 bg_w, bg_h = bg_img.size grad_w, grad_h = gradient_img.size gradient_img = gradient_img.resize((bg_w, grad_h), Image.Resampling.LANCZOS) # 3. 创建与背景图尺寸一致的渐变画布,将渐变图粘贴到底部 grad_canvas = Image.new("RGBA", bg_img.size, (0, 0, 0, 0)) paste_y = bg_h - grad_h # 计算底部粘贴的Y坐标 grad_canvas.paste(gradient_img, (0, paste_y)) # 4. 提取背景图的Alpha通道作为蒙版 bg_alpha = bg_img.split()[3] # 5. 将渐变画布与背景图复合(两种方式二选一) # 方式一:使用alpha_composite(简洁高效) result = Image.alpha_composite(bg_img, grad_canvas) # 方式二:使用paste结合蒙版(效果一致) # result = bg_img.copy() # result.paste(grad_canvas, mask=bg_alpha) # 6. 保存结果 result.save("final_result.png")
关键细节说明
- RGBA模式转换:必须确保两张图都转为RGBA格式,才能正常处理透明通道;
- 渐变尺寸适配:将渐变图宽度缩放到与背景图一致,保证底部完全贴合;
- Alpha蒙版作用:背景图的Alpha通道记录了圆角和透明区域的信息,用它作为蒙版粘贴渐变,能让渐变只显示在背景有内容的区域;
- 两种复合方式:
alpha_composite会自动处理透明叠加逻辑,带mask参数的paste则是手动指定蒙版范围,二者最终效果一致。
内容的提问来源于stack exchange,提问作者kursatba
相关产品推荐
相关产品推荐

