ich bin neu hier, aber nicht neu in Python, habe also schon ein paar Vorkenntnisse.
Wie ich im Titel schon geschrieben, habe ich vor, in einem Bild eine Farbe durch Alpha zu ersetzen, wie das auch in Bildbearbeitungsprogrammen wie Gimp oder Photoshop passiert.
Für diejenigen, die das noch nicht gemacht haben:
Ich wähle eine Farbe aus, z.B. #00FF00. Dann werden alle Bildpunkte abgearbeitet und überall da, wo Grün enthalten ist, wird eben der Grün-Wert abgezogen und der Alpha-Wert auch. Genau dieses Verhalten möchte ich jetzt mit Python erreichen.
Als Hilfsmittel habe ich mir vorerst PIL genommen, später soll das direkt auf RGBA-Ebene laufen, da ich eine .bmp generiere; PIL brauche ich vorerst nur, um durch ein bestehendes Bild zu iterieren.
Meine bisherige Überlegung:
- Farbe a, Farbe key
- Wenn a*r = key (also a ein gestreckter Vektor von key ist), dann alpha = 255 * (1-r)
- Farbe a (HSV), Farbe key (HSV)
- Wenn hue gleich sind, dann alpha = hue_a / hue_key
Aktuell sieht mein Code so aus (beide Methoden gemixt), in main() wird durch alle Pixel iteriert und denen die Farbe aus makeColor(color) zugewiesen:
Code: Alles auswählen
from colorsys import rgb_to_hsv, hsv_to_rgb
def makeColor(color):
global key
o = []
c = tuple(color[:-1])
k = tuple(key[:-1])
c = apply(rgb_to_hsv, c)
k = apply(rgb_to_hsv, k)
a = 1
if c[0] == k[0]:
a = 1 - c[2] / float(k[2])
for i in range(0, len(key)):
o.append(int(a * color[i]))
return tuple(o)