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

为何变量赋值修改会影响Python PIL图片处理代码的功能?

Python PIL 设置白色像素透明的代码问题

原代码尝试将图片白色像素设为透明,但无法正常工作:

from PIL import Image

img = Image.open('img.png')
imga = img.convert("RGBA")
datas = imga.getdata()

newData = []
for item in datas:
    if item[0] == 255 and item[1] == 255 and item[2] == 255:
        newData.append((255, 255, 255, 0))
    else:
        newData.append(item)
img.putdata(newData)
img.save("img2.png", "PNG")

将其中的代码段:

imga = img.convert("RGBA")
datas = imga.getdata()

修改为:

img = img.convert("RGBA")
datas = img.getdata()

后代码即可正常实现白色像素透明的效果,原因如下:

  • img.convert("RGBA")会生成一个全新的RGBA模式图像对象,而非直接修改原img对象。原代码中,你基于这个新对象imga生成了带透明通道的像素数据newData,但最后却把数据写入到最初打开的img对象里——这个原img可能还是RGB模式(没有Alpha通道),无法兼容带透明信息的像素数据,导致修改无效,保存后看不到透明效果。
  • 修改后,你直接把img变量替换成了RGBA模式的新对象,后续所有像素操作都针对这个支持透明通道的对象,修改后的newData也正确写入其中,最后保存的就是已经处理好的带透明效果的图像,自然能达到预期目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:35:02