11-更改单个像素
19.2.6 更改单个像素
单个像素的颜色可以通过 getpixel()
方法和 putpixel()
方法取得和设置。它们都接收一个元组,表示像素的x和y坐标。 putpixel()
方法还接收一个元组,作为该像素的颜色。这个颜色参数是4整数RGBA元组或3整数RGB元组。在交互式环境中输入以下代码:
>>> from PIL import Image
❶ >>> im = Image.new('RGBA', (100, 100))
❷ >>> im.getpixel((0, 0))
(0, 0, 0, 0)
❸ >>> for x in range(100):
for y in range(50):
❹ im.putpixel((x, y), (210, 210, 210))
>>> from PIL import ImageColor
❺ >>> for x in range(100):
for y in range(50, 100):
❻ im.putpixel((x, y), ImageColor.getcolor('darkgray', 'RGBA'))
>>> im.getpixel((0, 0))
(210, 210, 210, 255)
>>> im.getpixel((0, 50))
(169, 169, 169, 255)
>>> im.save('putPixel.png')
在❶行,我们得到一个新图像,这是一个100像素×100像素的透明正方形。对一些坐标调用 getpixel()
将返回(0,0,0,0),因为图像是透明的❷。要给图像中的像素上色,我们可以使用嵌套的 for
循环,遍历图像上半部分的所有像素❸,用 putpixel()
设置每个像素的颜色❹。这里我们向 putpixel()
传入RGB元组(210,210,210),即浅灰色。
假定我们希望图像下半部分是深灰色,但不知道深灰色的RGB元组。 putpixel()
方法不接收 'darkgray'
这样的标准颜色名称,因此必须使用 ImageColor. getcolor()
来获得 'darkgray'
的颜色元组。循环遍历图像的下半部分像素❺,向 putpixel()
传入 ImageColor.getcolor()
的返回值❻,你现在应该得到一个图像,上半部分是浅灰色,下半部分是深灰色,如图19-10所示。可以对一些坐标调用 getpixel()
,确认指定像素的颜色符合你的期望。最后,将图像存入putPixel.png。
当然,在图像上一次绘制一个像素不是很方便。如果需要绘制形状,就使用本章稍后介绍的 ImageDraw
模块。