PHP Farben innerhalb eines Bildes (png/jpg) austauschen

nixname

Auftragsprogger
ID: 405054
L
19 Oktober 2009
89
12
Hallo,

ich möchte innerhalb eines Bildes (Format png oder jpg) Farben tauschen.
Soweit ich dieses aufgrund der Dokumentation ersehen kann, bleibt mir hierbei wohl leider nur die Möglichkeit per Schleife die einzelnen Pixel abzufragen und bei einem "Treffer" (auszutauschende Farbe) selbigen neu zu setzten.

Hierzu habe ich zwei Fragen wo ich nicht so recht weiterkomme und hoffe deshalb auf konstruktive Antworten:

a) Besteht eine andere Möglichkeit als die einzelnen Pixel durchzulaufen, da diese Methode ja doch recht CPU-lastig ist ?
b) Wie kann ich "normale" HEX (z.B. #ff0000) oder RGB-Farbwerte (z.B. 255,144,233) in den Dezimal-Farbwert umrechnen den imagecolorat und imagesetpixel erwartet ?

Gruss
nixname
 
Zu a)
Wenn es sich um Palettenfarben handelt, geht das ganz einfach, indem du die Farbe umdefinierst. Ich kann mir aber nicht vorstellen, dass du so ein Bild hast. Das gabs vor 10-15 Jahren vielleicht noch :biggrin:

Zu b) Dafür gibts die Funktion imagecolorallocate(), die das tut. Allerdings is die auch nur noch interessant, wenn du Palettenfarben hast - was nie der Fall is :mrgreen: In Truecolor-Bildern kannst du - müsste irgendwo in den Comments stehen, oder ich habs mir mal selber aus dem GDLib-Source rausgelesen - einfach den Hexwert nehmen.

Zu deinem Beispiel:
Rot: #ff0000 -> 0xff0000

RGB-Werte eben von Hand berechnen (RRGGBB, d.h. Rot um 16 Bit shiften, Grün um 8 Bit shiften und Blau dazuodern) oder imagecolorallocate() nehmen.
Dein Beispiel: RGB(255, 144, 233) = RGB(0xff, 0x90, 0xe9) = 0xff90e9
Das is auch der Wert, den dir imagecolorallocate() auch berechnen würde.