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

如何为PIL库的paste方法制作符合要求的遮罩?

问题原因

你的代码存在两个核心错误:

  • 没有保证遮罩素材和待处理图片的尺寸一致,尺寸不匹配会导致蒙版错位/失效
  • 处理RGBA格式遮罩时错误地将所有像素的alpha通道设为255,PIL使用RGBA图作为paste方法的mask参数时,仅读取alpha通道作为透明度依据,全255的alpha等于蒙版完全不生效

正确实现代码

推荐直接替换原图alpha通道的方案,逻辑更简单不易出错:

from PIL import Image

# 打开原图转RGBA模式
img = Image.open("image.jpg").convert("RGBA")
# 打开遮罩:先缩放到和原图同尺寸,再转单通道灰度模式
mask = Image.open("images/mask_card.png").resize((img.width, img.height)).convert("L")

# 直接将遮罩灰度值作为原图的alpha通道:白色区域不透明,黑色区域透明
img.putalpha(mask)
img.show()
# 若要保留透明背景保存,使用png格式即可
# img.save("处理后图片.png")

如果需要沿用你原来的paste写法,调整后代码如下:

from PIL import Image

img = Image.open("image.jpg")
mask = Image.open("images/mask_card.png").resize((img.width, img.height)).convert("L")

essai = Image.new('RGBA', (img.width, img.height))
essai.paste(img, (0, 0), mask=mask)
essai.show()

补充说明

如果出现蒙版效果和预期相反的情况(比如你要保留的区域变透明,要去掉的边角反而显示),可以在转灰度后对遮罩做反色处理:

mask = Image.eval(mask, lambda x: 255 - x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:11