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

如何在Pillow库中为指定绘制线条设置透明度

解决方案

Pillow的ImageDraw直接绘制带alpha参数的颜色不会自动和底图做透明混合,需要通过临时透明图层复合的方式实现单条线条的透明度效果,完整实现代码如下:

from PIL import Image, ImageDraw

# 初始化主画布
img = Image.new('RGBA', (500, 500), (255, 255, 255, 255))
draw = ImageDraw.Draw(img)

# 先绘制不透明的参考线条:红色竖线、底部黑色横线
draw.line((200, 0, 200, 600), (255, 0, 0), 60)
draw.line((500, 400, 0, 400), (0, 0, 0), 60)

# ---------------- 绘制透明线条核心步骤 ----------------
TRANSPARENCY = 0.25
# 1. 新建和主画布同尺寸的完全透明临时图层
temp_layer = Image.new('RGBA', img.size, (255, 255, 255, 0))
temp_draw = ImageDraw.Draw(temp_layer)
# 2. 在临时图层上绘制带透明度的线条
temp_draw.line((500, 100, 0, 100), (0, 0, 0, int(255 * TRANSPARENCY)), 60)
# 3. 将临时图层复合到主画布上
img = Image.alpha_composite(img, temp_layer)
# -------------------------------------------------------

# 导出为JPG:先转RGB去除alpha通道,再保存即可
img.convert('RGB').save('output.jpg')
# 预览效果
img.show()

你之前的代码无效的原因是直接在主画布的Draw对象传入带alpha的颜色时,Pillow不会主动做alpha通道的混合计算,只是把alpha值当做颜色参数的一部分直接覆盖写入,因此看不到透明效果。

运行上述代码后,中间的半透黑色横线会透出下方的红色竖线,完全符合透明需求,最终导出的JPG也会保留混合后的视觉效果。

内容的提问来源于stack exchange,提问作者project.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:03