跳转到主要内容

Python中处理颜色的实用工具。

项目描述

License Latest Version Downloads

一个提供Python中处理颜色实用工具的库。颜色通过Color类建模,可以表示为RGBHEXWEBYIQ格式。

0. 安装

colorutils可以从pypi安装

pip install colorutils

从pypi更新现有安装到最新版本

pip install colorutils --upgrade

1. 当前功能

v0.2.1(发布于2015年5月25日)

  • Windows上pip安装找不到包的bug修复

v0.2(发布于2015年5月23日)

  • 添加HSV颜色表示和转换

  • 添加YIQ颜色表示和转换

  • 颜色对象可以作为可迭代对象处理

  • 颜色运行实现

  • 添加预定义颜色调色板

  • 包重构

v0.1(发布日期:2015年5月16日)

  • 一种通用的抽象颜色模型,允许颜色加法和减法

  • 颜色之间的转换:RGB元组、6字符HEX字符串、3字符HEX字符串和颜色的WEB表示。

  • 随机颜色生成

2. 报告错误/请求功能

要报告colorutils的错误或请求功能,请打开一个新的问题

3. 使用方法

3.1 实例化一个Color

实例化Color的基本方法

>>> from colorutils import Color
>>> c = Color((255, 255, 255))
>>> c
<Color (255, 255, 255)>

默认情况下,Color对象期望一个RGB 3元组,但有多种方式可以实例化一个Color。以青色为例,可能性

Color((0, 255, 255))
Color(green=255, blue=255)
Color(rgb=(0, 255, 255))
Color(hex='#00FFFF')
Color(hex='00ffff')
Color(hex='#0ff')
Color(hex='0ff')
Color(web='cyan')
Color(web='Cyan')
Color(web='CYAN')
Color(web='#00ffff')
Color(web='#0ff')
Color(yiq=(0.701, -0.596, -0.217))
Color(hsv=(180, 1, 1))

Color对象也可以从其他Color对象中获取颜色

>>> Color(Color((255, 255, 255)))
<Color (255, 255, 255)>

>>> Color(Color(Color(Color((255, 255, 255)))))
<Color (255, 255, 255)>

3.2 颜色转换

colorutils支持的当前颜色模型是:RGB、HEX、WEB、YIQ和HSV。每个实例化的Color对象都有属性,可以自动执行所需的转换

>>> c = Color((46, 139, 87))

>>> c.red
46

>>> c.green
139

>>> c.blue
87

>>> c.rgb
(46, 139, 87)

>>> c.hex
'#2e8b57'

>>> c.shorthex
'#2e8b57'

>>> c.web
'SeaGreen'

>>> c.yiq
(0.413, -0.152, -0.143)

>>> c.hsv
(146.452, 0.669, 0.545)

如果颜色是这样的,HEX表示可以捕获为3字符的十六进制

>>> c = Color((0, 0, 0))

>>> c.hex
'#000000'

>>> c.shorthex
'#000'

如果颜色不是已知的网络颜色名称,则WEB表示将返回十六进制值

>>> c = Color((1, 243, 77))

>>> c.hex
'#01f34d'

>>> c.web
'#01f34d'

这些相同的转换可以通过使用静态方法在不实例化Color对象的情况下完成

  • rgb_to_hex()

  • rgb_to_web()

  • rgb_to_yiq()

  • rgb_to_hsv()

  • hex_to_rgb()

  • hex_to_web()

  • hex_to_yiq()

  • hex_to_hsv()

  • web_to_rgb()

  • web_to_hex()

  • web_to_yiq()

  • web_to_hsv()

  • yiq_to_rgb()

  • yiq_to_hex()

  • yiq_to_web()

  • yiq_to_hsv()

  • hsv_to_rgb()

  • hsv_to_hex()

  • hsv_to_web()

  • hsv_to_yiq()

使用这些静态转换方法,可以链式转换(由于所有多值颜色表示的输入参数和输出参数都是元组),这是您无法使用Python默认的colorsys完成的。

>>> rgb_to_hex(hex_to_rgb('#808080'))
'#808080'

当然,要小心链式操作。由于转换算法中存在近似,因此会发生退化

>>> yiq_to_web(rgb_to_yiq(hex_to_rgb('808080')))
'#7f807e'

尽管如此,值仍然很接近

>>> hex(int('80', 16) - int('7f', 16))  # Red difference
'0x1'

>>> hex(int('80', 16) - int('80', 16))  # Green difference
'0x0'

>>> hex(int('80', 16) - int('7e', 16))  # Blue difference
'0x2'

3.3 Color 算术

尽管颜色加法和减法不一定有意义,但这种能力得到了支持。目前支持两种加法模型:LIGHTBLEND

3.3.1 加法

LIGHT

光模型是一种加法模型,rgb组件相加,但不超出最大值255。这是默认模型,每个Color都是用此模型初始化的,除非被覆盖。

光加法的一个例子

>>> Color((0, 100, 200)) + Color((100, 100, 100))
<Color (100, 200, 255)>
BLEND

混合模型是一种平均模型,每个rgb组件都取平均值。

混合加法的一个例子

>>> Color((0, 100, 200), arithmetic=ArithmeticModel.BLEND) + Color((100, 100, 100))
<Color (50, 150, 250)>

在指定模型时,请注意操作中的第一个对象(例如,'Object1 + Object2'中的Object1)的算术模型将用于计算加法。

Color加法也可以对表示RGB值的3元组进行操作

>>> Color((50, 50, 50)) + (20, 20, 20)
<Color (70, 70, 70)>

3.3.2 减法

目前只有一个减法模型,等同于LIGHT加法模型的逆。没有表示BLEND逆的模型,因为平均的逆实际上没有意义。

>>> Color((100, 100, 100)) - Color((0, 75, 200))
<Color (100, 25, 0)>

颜色减法 也可以在表示 RGB 值的 3 元组上操作

>>> Color((50, 50, 50)) - (20, 20, 20)
<Color (30, 30, 30)>

3.4 颜色相等性

默认情况下,测试颜色之间的相等性是测试 RGB 值之间的相等性

>>> c1 = Color((10, 20, 30))
>>> c2 = Color((10, 20, 30))
>>> c3 = Color((10, 20, 20))

>>> c1 == c2
True

>>> c1 == c3
False

可以设置不同的相等性函数,使用 colorutils.equality 中的预定义相等性,或自定义相等性函数

>>> from colorutils.equality import *
>>> c = Color((10, 20, 30), equality_fn=RED_eq)
>>> c2 = Color((10, 40, 60))

>>> c == c2
True

>>> c2 == c
False

注意,在上面的示例中,当检查红色相等性时,当具有 RED_eq 相等性的颜色在比较中排在前面时,它评估为 True。如果它排在后面,它评估为 False。这是因为比较中第一个 Color 实例的相等性函数定义了使用哪个相等性函数。

预定义的相等性包括

  • RGB_eq

  • RED_eq

  • GREEN_eq

  • BLUE_eq

  • HEX_eq

  • WEB_eq

  • YIQ_eq

  • HSV_eq

定义自定义相等性将遵循以下 RGB_eq 定义的模式

RGB_eq = lambda c1, c2: c1.rgb == c2.rgb

3.5 颜色调色板

存在一些预定义的颜色调色板以方便使用。当前已实现的调色板包括

  • 灰度

  • 主色

  • RGB

  • ROYGBV

  • 副色

可以从调色板中使用单个命名的颜色,或检索所有颜色

>>> import colorutils.palettes.primary as primary

>>> primary.red
<Color (255, 0, 0)>

>>> primary.yellow
<Color (255, 255, 0)>

>>> primary.blue
<Color (0, 0, 255)>

>>> primary.all
[<Color (255, 0, 0)>, <Color (255, 255, 0)>, <Color (0, 0, 255)>]

4. colorutils 与其他工具的比较

要查看 colorutils 转换算法与其他算法/提供值的比较,请参阅 比较 维基页面。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

colorutils-0.3.0.tar.gz (18.9 kB 查看哈希)

上传时间

构建分布

colorutils-0.3.0-py3-none-any.whl (13.5 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面