为何变量赋值修改会影响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
相关产品推荐
相关产品推荐

