我正在寻找一种方法来改变一种颜色的色调,知道它是RGB合成,然后用获得的RGB替换旧RGB的所有实例。例如,我希望红色变成紫色,浅红色,浅紫色,等等。。。
它可以在photoshop中通过改变颜色的色调来完成。在
到目前为止我的想法是:把RGB转换成HLS,然后改变色调。在
以下是到目前为止的代码(在“列表”列表中定义了多种颜色,而不仅仅是一种颜色):
(正如您可能注意到的,我只是一个初学者,代码本身相当脏;更干净的部分可能是从其他SO用户那里获取的)
谢谢!在import colorsys
from tempfile import mkstemp
from shutil import move
from os import remove, close
def replace(file, pattern, subst):
#Create temp file
fh, abs_path = mkstemp()
new_file = open(abs_path,'w')
old_file = open(file)
for line in old_file:
new_file.write(line.replace(pattern, subst))
#close temp file
new_file.close()
close(fh)
old_file.close()
#Remove original file
remove(file)
#Move new file
move(abs_path, file)
def decimal(var):
return '{:g}'.format(float(var))
list=[[60,60,60],[15,104,150],[143,185,215],[231,231,231],[27,161,253],[43,43,43],[56,56,56],[255,255,255],[45,45,45],[5,8,10],[23,124,193],[47,81,105],[125,125,125],[0,0,0],[24,24,24],[0,109,166],[0,170,255],[127,127,127]]
for i in range(0,len(list)):
r=list[i][0]/255
g=list[i][1]/255
b=list[i][2]/255
h,l,s=colorsys.rgb_to_hls(r,g,b)
print(decimal(r*255),decimal(g*255),decimal(b*255))
h=300/360
str1=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))
r,g,b=colorsys.hls_to_rgb(h, l, s)
print(decimal(r*255),decimal(g*255),decimal(b*255))
str2=str(decimal(r*255)) + "," + str(decimal(g*255)) + "," + str(decimal(b*255))
replace("Themes.xml",str1,str2)
编辑:问题很简单:R,G,B和H必须在0和1之间,我把它们设置在0到255和0到360之间。更新代码。在