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

如何解决PIL裁剪的圆形透明图片粘贴到白色背景变成方形的问题

问题原因

你在调用PIL的paste方法时没有指定透明蒙版,PIL默认会忽略PNG图片的alpha通道,将所有像素直接覆盖到背景上,原本透明的区域也会被填充,最终呈现方形效果。

解决方法

只需在粘贴时额外传入mask参数,使用圆形图片自身的alpha通道作为蒙版即可:

# 将原有paste逻辑替换为以下代码
circle_img = Image.open('result.png')
# 第二个参数只需指定左上角坐标即可,无需传入完整边界
background.paste(circle_img, (200, 200), mask=circle_img)

优化方案(可选)

你可以省略中间临时文件result.png的存储步骤,直接在内存中完成所有处理,减少磁盘IO开销,完整可运行代码如下:

from PIL import Image, ImageDraw
import numpy as np

pfp = Image.open(avatar)

# 裁剪为圆形
img = pfp.convert("RGB")
h, w = img.size
# 生成alpha通道
alpha = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(alpha)
draw.pieslice([0, 0, h, w], 0, 360, fill=255)
# 直接合并生成带透明通道的圆形图片
circle_img = Image.merge("RGBA", (*img.split(), alpha))

# 读取背景并粘贴
background = Image.open('white2.png')
background.paste(circle_img, (200, 200), mask=circle_img)
background.save('combined.png')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:05