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

03-颜色和RGBA值

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

19.1.1 颜色和RGBA值

计算机程序通常将图像中的颜色表示为RGBA值。RGBA值是一组数字,指定颜色中的红、绿、蓝和alpha(透明度)的值。这些值是从0(根本没有)到255(最高)的整数。这些RGBA值分配给单个像素,像素是计算机屏幕上能显示一种颜色的最小点(你可以想到,屏幕上有几百万像素)。像素的RGB值设置准确地告诉它应该显示哪种颜色。图像也有一个alpha值,用于生成RGBA值。如果图像显示在屏幕上,遮住了背景图像或桌面墙纸,alpha值决定了“透过”这个图像的像素你可以看到多少背景。

pillow 中,RGBA值表示为4个整数值的元组。例如,红色表示为( 255, 0, 0, 255) 。这种颜色中红的值为最大,没有绿和蓝,并且alpha值最大,这意味着它完全不透明。绿色表示为( 0, 255, 0, 255 ),蓝色是( 0, 0, 255, 255 )。白色是各种颜色的组合,即( 255, 255, 255, 255 );而黑色没有任何颜色,是( 0, 0, 0, 255 )。

如果颜色的alpha值为0,那么不论RGB值是什么,该颜色都是不可见的。毕竟,不可见的红色看起来就和不可见的黑色一样。

pillow 使用了HTML使用的标准颜色名称。表19-1列出了一些标准颜色的名称及其RGBA值。

表19-1 标准颜色名称及其RGBA值

| 名称 | RGBA值 | | 名称 | RGBA值 | | :----- | :----- | :----- | :----- | :----- | :----- | :----- | | 白色 | ( 255, 255, 255, 255 ) | | 红色 | ( 255, 0, 0, 255 ) | | 绿色 | ( 0, 255 , 0, 255 ) | | 蓝色 | ( 0, 0, 255, 255 ) | | 灰色 | ( 128, 128, 128, 255 ) | | 黄色 | ( 255, 255, 0, 255 ) | | 黑色 | ( 0, 0, 0, 255 ) | | 紫色 | ( 128, 0, 128, 255 ) |

pillow 提供 ImageColor.getcolor() 函数,所以你不必记住想用的颜色的RGBA值。该函数接收一个颜色名称字符串作为第一个参数,字符串 'RGBA' 作为第二个参数,返回一个RGBA元组。

要了解该函数的工作方式,就在交互式环境中输入以下代码:

❶ >>> from PIL import ImageColor
❷ >>> ImageColor.getcolor('red', 'RGBA')
   (255, 0, 0, 255) 
❸ >>> ImageColor.getcolor('RED', 'RGBA')
   (255, 0, 0, 255)
  >>> ImageColor.getcolor('Black', 'RGBA')
   (0, 0, 0, 255)
  >>> ImageColor.getcolor('chocolate', 'RGBA')
   (210, 105, 30, 255)
  >>> ImageColor.getcolor('CornflowerBlue', 'RGBA')
   (100, 149, 237, 255)

首先,你需要从 PIL 导入 ImageColor 模块❶(不是从 pillow ,稍后你就会明白为什么)。传递给 ImageColor.getcolor() 的颜色名称字符串是不区分大小写的,因此传入 'red' ❷和传入 'RED' ❸将得到同样的RGBA元组。还可以传递更多的不常见的颜色名称,如 'chocolate''Cornflower Blue'

pillow 支持大量的颜色名称,从 'aliceblue''whitesmoke' 。在No Starch出版社官网本书对应页面的资源中,可以找到超过100种标准颜色名称的完整列表。