Ich suche nach einer Möglichkeit, den Farbton einer Farbe zu ändern, wenn ich ihre RGB-Zusammensetzung kenne, und dann alle Instanzen des alten RGB durch das neue RGB zu ersetzen. Ich möchte zum Beispiel, dass Rot lila, hellrot, hellviolett, usw. wird. Das kann man in Photoshop machen, indem man den Farbton einer Farbe ändert.
Bisher habe ich an Folgendes gedacht: RGB in HLS konvertieren, dann den Farbton ändern.
Hier ist der bisherige Code (es werden mehrere Farben geändert, nicht nur eine, die in der Liste "list" definiert ist):
(Wie Sie vielleicht bemerken, bin ich nur ein Anfänger und der Code selbst ist ziemlich schmutzig; die saubereren Teile sind wahrscheinlich von anderen SO-Nutzern übernommen) Vielen Dank an alle!
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)
EDIT: Das Problem war ziemlich einfach: R,G,B und H müssen zwischen 0 und 1 liegen, ich habe sie zwischen 0 und 255 und 0 und 360 eingestellt. Aktualisierter Code.