Pillow ImageColor 模块
ImageColor 是 Python Pillow 图像处理库中的一个子模块,专门用于处理颜色相关的操作。
ImageColor 提供了一系列方法将颜色字符串转换为 RGB 或 RGBA 格式的元组,支持多种颜色表示格式。
ImageColor 模块虽然小巧,但在图像处理中扮演着重要角色,特别是在需要动态指定颜色的场景中。
可以通过以下方式导入 ImageColor 模块:
from PIL import ImageColor
ImageColor 模块核心方法
下表列出了 ImageColor 模块的主要方法及其功能说明:
方法名称 | 参数 | 返回值 | 功能描述 |
---|---|---|---|
getrgb(color) |
color : 颜色字符串 |
RGB 元组 (r, g, b) | 将颜色字符串转换为 RGB 元组 |
getcolor(color, mode) |
color : 颜色字符串mode : 目标颜色模式 |
颜色值元组 | 将颜色字符串转换为指定颜色模式的值 |
colormap |
无 | 字典 | 返回 Pillow 支持的颜色映射表 |
方法详细说明与示例
getrgb() 方法
getrgb()
方法是最常用的方法,它将各种格式的颜色字符串转换为标准的 RGB 元组。
支持的格式包括:
- 十六进制颜色码:
"#RRGGBB"
或"#RGB"
- RGB 函数表示:
"rgb(255, 0, 0)"
- HSL 函数表示:
"hsl(0, 100%, 50%)"
- 颜色名称:
"red"
,"blue"
等
示例代码:
实例
from PIL import ImageColor
# 十六进制颜色
print(ImageColor.getrgb("#ff0000")) # 输出: (255, 0, 0)
print(ImageColor.getrgb("#f00")) # 输出: (255, 0, 0)
# RGB 函数
print(ImageColor.getrgb("rgb(255, 0, 0)")) # 输出: (255, 0, 0)
# 颜色名称
print(ImageColor.getrgb("red")) # 输出: (255, 0, 0)
print(ImageColor.getrgb("blue")) # 输出: (0, 0, 255)
# 十六进制颜色
print(ImageColor.getrgb("#ff0000")) # 输出: (255, 0, 0)
print(ImageColor.getrgb("#f00")) # 输出: (255, 0, 0)
# RGB 函数
print(ImageColor.getrgb("rgb(255, 0, 0)")) # 输出: (255, 0, 0)
# 颜色名称
print(ImageColor.getrgb("red")) # 输出: (255, 0, 0)
print(ImageColor.getrgb("blue")) # 输出: (0, 0, 255)
getcolor() 方法
getcolor()
方法与 getrgb()
类似,但可以指定目标颜色模式。
支持的模式包括:
"RGB"
"RGBA"
"L"
(灰度)"CMYK"
"HSV"
示例代码:
实例
from PIL import ImageColor
# 转换为 RGBA
print(ImageColor.getcolor("red", "RGBA")) # 输出: (255, 0, 0, 255)
# 转换为灰度
print(ImageColor.getcolor("red", "L")) # 输出: 76 (红色在灰度中的值)
# 转换为 RGBA
print(ImageColor.getcolor("red", "RGBA")) # 输出: (255, 0, 0, 255)
# 转换为灰度
print(ImageColor.getcolor("red", "L")) # 输出: 76 (红色在灰度中的值)
colormap 属性
colormap
是一个字典,包含了 Pillow 支持的所有命名颜色及其对应的十六进制值。
示例代码:
实例
from PIL import ImageColor
# 获取颜色映射表
color_map = ImageColor.colormap
# 查看颜色数量
print(f"Pillow 支持 {len(color_map)} 种命名颜色")
# 查看特定颜色
print("红色的十六进制值:", color_map["red"]) # 输出: #ff0000
# 获取颜色映射表
color_map = ImageColor.colormap
# 查看颜色数量
print(f"Pillow 支持 {len(color_map)} 种命名颜色")
# 查看特定颜色
print("红色的十六进制值:", color_map["red"]) # 输出: #ff0000
实际应用示例
创建单色图像
实例
from PIL import Image, ImageColor
# 使用 ImageColor 获取颜色
color = ImageColor.getrgb("lightblue")
# 创建 200x200 的单色图像
img = Image.new("RGB", (200, 200), color)
img.show()
# 使用 ImageColor 获取颜色
color = ImageColor.getrgb("lightblue")
# 创建 200x200 的单色图像
img = Image.new("RGB", (200, 200), color)
img.show()
动态设置绘图颜色
实例
from PIL import Image, ImageDraw, ImageColor
# 创建空白图像
img = Image.new("RGB", (400, 200), "white")
draw = ImageDraw.Draw(img)
# 使用不同颜色绘制图形
colors = ["red", "#00FF00", "rgb(0, 0, 255)", "hsl(30, 100%, 50%)"]
for i, color_str in enumerate(colors):
color = ImageColor.getrgb(color_str)
draw.rectangle([50 + i*80, 50, 100 + i*80, 150], fill=color)
img.show()
# 创建空白图像
img = Image.new("RGB", (400, 200), "white")
draw = ImageDraw.Draw(img)
# 使用不同颜色绘制图形
colors = ["red", "#00FF00", "rgb(0, 0, 255)", "hsl(30, 100%, 50%)"]
for i, color_str in enumerate(colors):
color = ImageColor.getrgb(color_str)
draw.rectangle([50 + i*80, 50, 100 + i*80, 150], fill=color)
img.show()
注意事项
- 颜色字符串格式:确保颜色字符串格式正确,否则会引发
ValueError
- 颜色模式支持:不是所有颜色模式都支持所有颜色转换
- 性能考虑:频繁调用颜色转换方法可能会影响性能,建议预先转换并存储常用颜色
- 颜色名称限制:Pillow 支持的颜色名称有限,完整列表可通过
ImageColor.colormap
查看
通过掌握 ImageColor 模块,你可以更灵活地在 Pillow 图像处理中使用各种颜色表示方式,为你的图像处理程序增添更多可能性。
点我分享笔记