当前位置:嗨网首页>书籍在线阅读

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。

146.png

图19-10 putPixel.png中的图像

当然,在图像上一次绘制一个像素不是很方便。如果需要绘制形状,就使用本章稍后介绍的 ImageDraw 模块。