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值。
| 名称 | 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种标准颜色名称的完整列表。