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)

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 (红色在灰度中的值)

colormap 属性

colormap 是一个字典,包含了 Pillow 支持的所有命名颜色及其对应的十六进制值。

示例代码:

实例

from PIL import ImageColor

# 获取颜色映射表
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()

动态设置绘图颜色

实例

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()

注意事项

  1. 颜色字符串格式:确保颜色字符串格式正确,否则会引发 ValueError
  2. 颜色模式支持:不是所有颜色模式都支持所有颜色转换
  3. 性能考虑:频繁调用颜色转换方法可能会影响性能,建议预先转换并存储常用颜色
  4. 颜色名称限制:Pillow 支持的颜色名称有限,完整列表可通过 ImageColor.colormap 查看

通过掌握 ImageColor 模块,你可以更灵活地在 Pillow 图像处理中使用各种颜色表示方式,为你的图像处理程序增添更多可能性。