You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pillow将PNG粘贴到另一PNG时不覆盖背景图像的实现问题

你遇到的问题是PIL的paste方法默认行为是直接用源图的像素完全覆盖目标图对应位置的像素,包括alpha通道。你粘贴的源图im2对应位置的alpha值为0,覆盖后目标图的对应区域alpha也被改为0,因此出现了透明块。

解决方案

只需在调用paste方法时传入mask参数,将待粘贴的透明图本身作为蒙版即可,该模式下会自动跳过源图中完全透明的区域,仅保留不透明/半透明区域的混合效果,完全透明的区域会直接保留背景图的原有像素。

修改后的代码示例:

from PIL import Image

im2 = Image.new("RGBA", (100,100), (0,0,0,0))
im3 = Image.open(r".\test.png")
# 新增mask参数,值为待粘贴的图像本身
im3.paste(im2, (0, 0), mask=im2)
im3.save(r".\test.png")

如果你的需求是粘贴时仅保留源图的不透明内容,不需要半透明混合效果,也可以提前将源图的透明部分裁剪掉再粘贴,效果一致。

内容的提问来源于stack exchange,提问作者Christopher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:07