2 Stimmen

Ändern des Farbtons mit Python

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X