在Python中可以改变单个像素的颜色吗?
我想用Python来改变一张图片上某个特定像素的颜色,我该怎么做呢?
1 个回答
25
在Gabi Purcaru的链接中提到的例子基础上,这里有一些从PIL文档中整理出来的内容。
使用PIL来可靠地修改一个像素的最简单方法是:
x, y = 10, 25
shade = 20
from PIL import Image
im = Image.open("foo.png")
pix = im.load()
if im.mode == '1':
value = int(shade >= 127) # Black-and-white (1-bit)
elif im.mode == 'L':
value = shade # Grayscale (Luminosity)
elif im.mode == 'RGB':
value = (shade, shade, shade)
elif im.mode == 'RGBA':
value = (shade, shade, shade, 255)
elif im.mode == 'P':
raise NotImplementedError("TODO: Look up nearest color in palette")
else:
raise ValueError("Unexpected mode for PNG image: %s" % im.mode)
pix[x, y] = value
im.save("foo_new.png")
这个方法在PIL 1.1.6及以上版本中都能正常工作。如果你碰巧需要支持一个旧版本,那就得牺牲一些性能,把pix[x, y] = value
替换成im.putpixel((x, y), value)
。