python怎么变各种颜色_python – 如何淡化颜色
有很多方法可以做到這一點(diǎn).您如何選擇這取決于您是否重視速度和簡(jiǎn)單性或感知均勻性.如果你需要它是真正統(tǒng)一的,你需要用顏色配置文件定義RGB顏色,你需要配置文件的原色,這樣你就可以轉(zhuǎn)換為XYZ,然后轉(zhuǎn)換到LAB,你可以操作L通道.
大多數(shù)情況下,您不需要這樣做,而是可以使用像Photoshop一樣的簡(jiǎn)單HSB模型.
要做到這一點(diǎn),您只需想象一下RGB點(diǎn)與3D空間中的白點(diǎn)之間的線,并沿著該線移動(dòng)顏色.實(shí)際上,您可以為該線創(chuàng)建參數(shù)方程并移動(dòng)參數(shù).
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將返回白色.之間的一切都將是相同色調(diào)的淺色調(diào).這應(yīng)該給你的結(jié)果與Photoshop的HSB實(shí)現(xiàn)一致,但是將取決于設(shè)備并且可能不是完全一致的.
如果你有RGB [200,100,50]并且放入.50的百分比,它應(yīng)該返回RGB [227.5 177.5 152.5] Photoshop報(bào)告兩者的色調(diào)為20o.
沒有numpy這樣做并不難,但是元素操作很方便.
根據(jù)評(píng)論進(jìn)行編輯:
我并不是建議你這樣做,除非你知道你真的需要這么做.但是,如果你想轉(zhuǎn)換為L(zhǎng)AB,你可以毫無困難地進(jìn)行操作.最重要的是,你需要知道你的RGB數(shù)字開頭的顏色空間,或者你需要對(duì)它們的含義做一些假設(shè).由于sRGB在網(wǎng)絡(luò)上非常標(biāo)準(zhǔn),我會(huì)在這里假設(shè).
轉(zhuǎn)換并不困難,但很容易出錯(cuò).令人高興的是,有一個(gè)非常好的colormath模塊和良好的文檔:https://github.com/gtaylor/python-colormath
使用它你可以像這樣在sRGB和LAB之間轉(zhuǎn)換:
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)
實(shí)驗(yàn)室現(xiàn)在是一個(gè)帶有亮度通道lab.lab_l的顏色,您可以在黑色(0)和白色(100)之間上下移動(dòng).這應(yīng)該比HSB在感知上更統(tǒng)一(但是,根據(jù)您的應(yīng)用,可能還不足以保證工作).
您只需更改lab_l然后轉(zhuǎn)換回:
lab.lab_l = 80
new_sRGB = convert_color(lab, color_objects.sRGBColor).get_upscaled_value_tuple()
new_sRGB現(xiàn)在是[198,198,198]. colormath為您處理光源和伽瑪問題.
總結(jié)
以上是生活随笔為你收集整理的python怎么变各种颜色_python – 如何淡化颜色的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python—列表、字典生成式
- 下一篇: 华为P40pro 手机云台_2020年目