• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Eine Problem/Fragestellung zu imagefilter (PHP)

schlegel.berlin

New member
Liebe Leute,

nun stehe ich grad wieder mal völlig auf dem Schlauch. Kann sein, dass es zu schnell heiß wurde und meine Synapsen durch die Hitze eingeschläfert wurden..

Wie auch immer, ich finde die Lösung nicht.

Aufgabenstellung:
ich möchte die WEIßEN Bildanteile eines PNG durch eine Farbe ersetzen und alle andere Bildanteile transparent machen.

Was ich bis jetzt schaffte, ist, die SCHWARZEN Bildanteile (siehe sampl.png, siehe Anhang) durch eine Farbe zu ersetzen, den Rest bekomme ich aber nicht transparent gemacht.

Was ich erreichen möchte ist. die WEIßEN Bildanteile von sample_2.png (siehe Anhang) mit einer Frabe zu erstezen und den Hintergrund (ist im Beispiel grün) tranparent machen.

Hier mal das, was ich habe:
PHP:
header('Content-Type: image/png');

$neue_farbe = "#FF0000";
$neue_farbe=trim(preg_replace("/#/","",$neue_farbe)); 
$farbkanal=array(hexdec(substr($neue_farbe,0,2)),hexdec(substr($neue_farbe,2,2)),hexdec(substr($neue_farbe,4,2)));
$r = $farbkanal[0];
$g = $farbkanal[1];
$b =  $farbkanal[2];
$bild = imagecreatefrompng("sample.png"); 
imagefilter($bild, IMG_FILTER_COLORIZE, $r, $g, $b);

imagepng($bild);
imagedestroy($bild);

Wahrscheinlich ist die Lösung wieder eher simpel und ich bin wieder mal nur zu blöd, sie zu finden :)

Könnt ihr mir helfen?
LG, Karin

NACHTRAG
Ist der Lösungsansatz eventuell der, zunächst einen bestimmten Farbbereich transparent (z.B. das Grün in sample.2.png) zu machen (mit imagecolorallocatealpha und imagecolortransparent), um dann anschließend die weißen Bildteile des "transparenten" PNG einzufärben?
 

Anhänge

  • sample.png
    sample.png
    17,3 KB · Aufrufe: 0
  • sample_2.png
    sample_2.png
    54,9 KB · Aufrufe: 0
Zuletzt bearbeitet:
OK Leute, ich habe das "Problem" vorerst anderweitig gelöst, bin aber weiter an Lösungsansätzen interessiert, weil die jetzt gefundene Ersatzlösung nicht wirklich "befriedigend ist" und mich natürlich die andereLösung, auch schon aus Gründen der "Vermehrung von Wissen" sehr interessiert ...
 
Ich würde da ja gar nicht über imagefilter() gehen, sondern einfach durch alle Pixel durchiterieren und dann die vier Kanäle (rot, grün, blau und alpha) entsprechend setzen (auslesen mit imagecolorat und setzen mit imagesetpixel())...
 
Danke kkapsner, habe mir das mal angeschaut (imagecolorat u. imagesetpixel). Das scheint ein guter Lösungsansatz zu sein.
Auch damit werde ich mich in Kürze beschäftigen und das Ergenis nebst Script hier posten...

LG, Karin
 
Zurück
Oben