Python Pillow - 图像颜色



在 Pillow(Python 图像库)中,图像上的颜色被定义为红色 (R)、绿色 (G) 和蓝色 (B) 分量的组合,通常称为 **RGB 颜色模型**。此模型将颜色表示为这三种原色的混合,每个分量的范围从 0(最小强度)到 255(最大强度)。通常还会包含第四个分量 Alpha (A) 用于表示透明度,其中 0 表示完全透明,255 表示完全不透明。

在处理图像时,准确定义颜色至关重要,因为它决定了图像的外观和构成。Pillow 提供了多种表示和定义颜色方法,使其能够灵活地用于各种图像处理和操作任务。

以下是这些颜色分量的详细说明:

红色 (R)

  • 红色分量表示颜色中红色的数量。

  • 当 R 为 0 时,表示没有红色,从而产生青色或绿色的色调。

  • 当 R 为 255 时,表示红色强度最大,产生纯红色。

  • 中间值会产生从粉红色到橙色的不同红色色调。

绿色 (G)

  • 绿色分量表示颜色中绿色的数量。

  • 当 G 为 0 时,表示没有绿色,从而产生品红色或蓝色的色调。

  • 当 G 为 255 时,表示绿色强度最大,产生纯绿色。

  • 中间值会产生从青柠色到蓝绿色的不同绿色色调。

蓝色 (B)

  • 蓝色分量表示颜色中蓝色的数量。

  • 当 B 为 0 时,表示没有蓝色,从而产生黄色或红色的色调。

  • 当 B 为 255 时,表示蓝色强度最大,产生纯蓝色。

  • 中间值会产生从海军蓝到天蓝色的不同蓝色色调。

Alpha (A)

  • Alpha 分量是可选的,但对于控制透明度至关重要。

  • 当 A 为 0 时,表示像素完全透明,允许其后面的内容显示出来。

  • 当 A 为 255 时,表示像素完全不透明,它完全覆盖了下面的内容。

  • 中间 Alpha 值会创建不同级别的透明度,允许像素部分透明。

为了在 Pillow 中表示颜色,我们通常使用一个元组或列表,其中包含四个值,顺序为 (R, G, B, A),以指定像素的颜色。例如,**(255, 0, 0, 255)** 表示一个完全不透明的红色像素,而 **(0, 255, 0, 128)** 表示一个半透明的绿色像素。

示例

让我们看看使用 Python Pillow 和 RGBA 颜色表示创建图像的示例。

from PIL import Image

# Create an RGBA image with Semi-transparent green
image = Image.new('RGBA', (700, 300), (0, 255, 0, 128))  

# Display the resultant Semi-transparent green image
image.show()

执行上述程序后,您将获得如下所示的 RGBA 输出:

colors_on_an_image_ex1

了解 RGB 颜色模型和 Alpha 分量是使用 Pillow 进行图像处理和操作的基础,因为它允许我们以各种方式创建、修改和组合颜色和图像。

十六进制颜色表示

十六进制颜色代码在 Web 和图形设计中被广泛使用。在 Pillow 中,我们可以使用十六进制字符串定义颜色,该字符串表示 RGB 值。格式为 **#RRGGBB**,其中 RR、GG 和 BB 分别是红色、绿色和蓝色的两位十六进制值。

示例

以下是如何使用 Python Pillow **十六进制**颜色表示创建图像的示例。在此示例中,我们正在创建具有 80% 不透明度的红色图像。

from PIL import Image

# Create a red colored image with 80% opacity
image = Image.new('RGBA', (700, 300), "#ff0000cc")  

# Display the resultant image
image.show()

运行上述程序后,您将获得以下输出:

colors_on_an_image_ex2

命名颜色

Pillow ImageColor 模块提供了一组命名颜色(常用的 HTML 颜色名称),允许我们使用这些颜色名称而不是数值。例如,名称 red 表示纯红色,需要注意的是颜色名称不区分大小写,这意味着“red”和“Red”被视为相同。

示例

以下示例演示了如何访问和打印 Pillow 的 **ImageColor** 模块中可用的命名颜色。

from PIL import ImageColor

# Access all the named colors
color_map = ImageColor.colormap

# Count the number of named colors
num_colors = len(color_map)

# Print the available named colors and count
print(color_map)
print(f'Total number of named colors: {num_colors}')

运行上述程序后,您将获得类似于以下的输出:

{'aliceblue': '#f0f8ff', 'antiquewhite': '#faebd7', 'aqua': '#00ffff', 'aquamarine': '#7fffd4', 'azure': '#f0ffff', 'beige': '#f5f5dc', 'bisque': '#ffe4c4', 'black': '#000000', 'blanchedalmond': '#ffebcd', 'blue': '#0000ff', 'blueviolet': '#8a2be2', 'brown': '#a52a2a', 'burlywood': '#deb887', 'cadetblue': '#5f9ea0', 'chartreuse': '#7fff00', 'chocolate': '#d2691e', 'coral': '#ff7f50', 'cornflowerblue': '#6495ed', 'cornsilk': '#fff8dc', 'crimson': '#dc143c', 'cyan': '#00ffff', 'darkblue': '#00008b', 'darkcyan': '#008b8b', 'darkgoldenrod': '#b8860b', 'darkgray': '#a9a9a9', 'darkgrey': '#a9a9a9', 'darkgreen': '#006400', 'darkkhaki': '#bdb76b', 'darkmagenta': '#8b008b', 'darkolivegreen': '#556b2f', 'darkorange': '#ff8c00', 'darkorchid': '#9932cc', 'darkred': '#8b0000', 'darksalmon': '#e9967a', 'darkseagreen': '#8fbc8f', 'darkslateblue': '#483d8b', 'darkslategray': '#2f4f4f', 'darkslategrey': '#2f4f4f', 'darkturquoise': '#00ced1', 'darkviolet': '#9400d3', 'deeppink': '#ff1493', 'deepskyblue': '#00bfff', 'dimgray': '#696969', 'dimgrey': '#696969', 'dodgerblue': '#1e90ff', 'firebrick': '#b22222', 'floralwhite': '#fffaf0', 'forestgreen': '#228b22', 'fuchsia': '#ff00ff', 'gainsboro': '#dcdcdc', 'ghostwhite': '#f8f8ff', 'gold': '#ffd700', 'goldenrod': '#daa520', 'gray': '#808080', 'grey': '#808080', 'green': '#008000', 'greenyellow': '#adff2f', 'honeydew': '#f0fff0', 'hotpink': '#ff69b4', 'indianred': '#cd5c5c', 'indigo': '#4b0082', 'ivory': '#fffff0', 'khaki': '#f0e68c', 'lavender': '#e6e6fa', 'lavenderblush': '#fff0f5', 'lawngreen': '#7cfc00', 'lemonchiffon': '#fffacd', 'lightblue': '#add8e6', 'lightcoral': '#f08080', 'lightcyan': '#e0ffff', 'lightgoldenrodyellow': '#fafad2', 'lightgreen': '#90ee90', 'lightgray': '#d3d3d3', 'lightgrey': '#d3d3d3', 'lightpink': '#ffb6c1', 'lightsalmon': '#ffa07a', 'lightseagreen': '#20b2aa', 'lightskyblue': '#87cefa', 'lightslategray': '#778899', 'lightslategrey': '#778899', 'lightsteelblue': '#b0c4de', 'lightyellow': '#ffffe0', 'lime': '#00ff00', 'limegreen': '#32cd32', 'linen': '#faf0e6', 'magenta': '#ff00ff', 'maroon': '#800000', 'mediumaquamarine': '#66cdaa', 'mediumblue': '#0000cd', 'mediumorchid': '#ba55d3', 'mediumpurple': '#9370db', 'mediumseagreen': '#3cb371', 'mediumslateblue': '#7b68ee', 'mediumspringgreen': '#00fa9a', 'mediumturquoise': '#48d1cc', 'mediumvioletred': '#c71585', 'midnightblue': '#191970', 'mintcream': '#f5fffa', 'mistyrose': '#ffe4e1', 'moccasin': '#ffe4b5', 'navajowhite': '#ffdead', 'navy': '#000080', 'oldlace': '#fdf5e6', 'olive': '#808000', 'olivedrab': '#6b8e23', 'orange': '#ffa500', 'orangered': '#ff4500', 'orchid': '#da70d6', 'palegoldenrod': '#eee8aa', 'palegreen': '#98fb98', 'paleturquoise': '#afeeee', 'palevioletred': '#db7093', 'papayawhip': '#ffefd5', 'peachpuff': '#ffdab9', 'peru': '#cd853f', 'pink': '#ffc0cb', 'plum': '#dda0dd', 'powderblue': '#b0e0e6', 'purple': '#800080', 'rebeccapurple': '#663399', 'red': '#ff0000', 'rosybrown': '#bc8f8f', 'royalblue': '#4169e1', 'saddlebrown': '#8b4513', 'salmon': '#fa8072', 'sandybrown': '#f4a460', 'seagreen': '#2e8b57', 'seashell': '#fff5ee', 'sienna': '#a0522d', 'silver': '#c0c0c0', 'skyblue': '#87ceeb', 'slateblue': '#6a5acd', 'slategray': '#708090', 'slategrey': '#708090', 'snow': '#fffafa', 'springgreen': '#00ff7f', 'steelblue': '#4682b4', 'tan': '#d2b48c', 'teal': '#008080', 'thistle': '#d8bfd8', 'tomato': '#ff6347', 'turquoise': '#40e0d0', 'violet': '#ee82ee', 'wheat': '#f5deb3', 'white': '#ffffff', 'whitesmoke': '#f5f5f5', 'yellow': '#ffff00', 'yellowgreen': '#9acd32'}
Total number of named colors: 148

灰度颜色

灰度颜色由一个单一的强度值表示,范围从 0(黑色)到 255(白色)。我们可以使用单个整数值定义灰度颜色。

示例

以下是如何使用灰度颜色表示创建新的灰度图像的示例。

from PIL import Image, ImageDraw, ImageFont

# Create a greyscale image with color intensity value
image = Image.new('L', (700, 300), 100)  

#Create a drawing object
draw = ImageDraw.Draw(image)

#Define text attributes
text = "Welcome to Tutorialspoint..."
font = ImageFont.truetype("arial.ttf", size=35)
text_position = (150, 130)

# Specify the text color using the single integer value
text_color = 255  

#Add text to the image
draw.text(text_position, text, fill=text_color, font=font)
image.show()

以下是上述程序的输出:

colors_on_an_image_ex3
广告