python怎么变各种颜色_python – 如何淡化颜色

有很多方法可以做到这一点.您如何选择这取决于您是否重视速度和简单性或感知均匀性.如果你需要它是真正统一的,你需要用颜色配置文件定义RGB颜色,你需要配置文件的原色,这样你就可以转换为XYZ,然后转换到LAB,你可以操作L通道.

大多数情况下,您不需要这样做,而是可以使用像Photoshop一样的简单HSB模型.

要做到这一点,您只需想象一下RGB点与3D空间中的白点之间的线,并沿着该线移动颜色.实际上,您可以为该线创建参数方程并移动参数.

import numpy as np

def lighter(color, percent):

'''assumes color is rgb between (0, 0, 0) and (255, 255, 255)'''

color = np.array(color)

white = np.array([255, 255, 255])

vector = white-color

return color + vector * percent

百分比0.0将返回相同的颜色,1.0将返回白色.之间的一切都将是相同色调的浅色调.这应该给你的结果与Photoshop的HSB实现一致,但是将取决于设备并且可能不是完全一致的.

如果你有RGB [200,100,50]并且放入.50的百分比,它应该返回RGB [227.5 177.5 152.5] Photoshop报告两者的色调为20º.

没有numpy这样做并不难,但是元素操作很方便.

根据评论进行编辑:

我并不是建议你这样做,除非你知道你真的需要这么做.但是,如果你想转换为LAB,你可以毫无困难地进行操作.最重要的是,你需要知道你的RGB数字开头的颜色空间,或者你需要对它们的含义做一些假设.由于sRGB在网络上非常标准,我会在这里假设.

转换并不困难,但很容易出错.令人高兴的是,有一个非常好的colormath模块和良好的文档:https://github.com/gtaylor/python-colormath

使用它你可以像这样在sRGB和LAB之间转换:

from colormath.color_objects import sRGBColor, LabColor

from colormath.color_conversions import convert_color

sRGB = sRGBColor(126, 126, 126, is_upscaled=True) # or between [0, 1] with out is_upscaled

lab = convert_color(sRGB, LabColor)

实验室现在是一个带有亮度通道lab.lab_l的颜色,您可以在黑色(0)和白色(100)之间上下移动.这应该比HSB在感知上更统一(但是,根据您的应用,可能还不足以保证工作).

您只需更改lab_l然后转换回:

lab.lab_l = 80

new_sRGB = convert_color(lab, color_objects.sRGBColor).get_upscaled_value_tuple()

new_sRGB现在是[198,198,198]. colormath为您处理光源和伽玛问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值