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

imageColorTransparent() funktioniert nicht richtig

Crashdown

New member
Hey,
habe gereade ein kleines Problem ( ja war zu vermuten ) mit imagecolortransparent.
Soweit läuft eigentlich alles, die gewählte Farbe erscheint im Browser auch transparent.
Öffnet man nun das Bild aber mit einem Grafikbearbeitungsprogramm,
dann erscheint die transparente Farbe wieder in ihrem ursprünglichen Farbton.

Hier der Code dazu:
PHP:
<?php
header('Content-type: image/png');

$polaroid = imagecreatefrompng("img/Polaroid4.png");

$image 	  = imagecreatefrompng("img.png");
imagefilter($image,IMG_FILTER_GRAYSCALE);

$paperclip= imagecreatefrompng('img/paperclip.png');

$base 	  = imagecreatetruecolor(268,355);
imagecolortransparent($base,imagecolorallocate($base,0,0,0));

//imagecopy($base,$image,9,31,0,0,300,300);
//imagecopy($base,$polaroid,0,23,0,0,268,332);
//imagecopy($base,$paperclip,200,2,0,0,62,123);


imagepng($base);
?>

Habt ihr ne Idee?

Grüße
 
Wo speicherst du das Bild? Dein Code ist nur temporär. Du müstest das neue Bild auch als Datei anlegen.
 
Habe es auch schon mit speicher probiert, der Hintergrund ist dann tatsächlich transparent, allerdings erscheint der Bereich der Büroklammer, die ich einfüge ( eine png-Grafik die bis auf die Büroklammer transparent ist), welcher halb transparent ist, mit dem Schwarzen Hintergrund. Ich habs jetzt gelöst indem ich die Büroklammer in diesem Bereich deckend lasse, ist aber trotzdem ne unschöne Lösung auch wenn mans eigentlich nicht bemerkt.
 
kannst du eventuelle die beiden Bilder mal anhängen? Hab evtl. ne Idee die ich nachher ausprobieren könnte.
 
Super - mein Lieblingsthema im Oberthema PHP+GD: Transparenz ( - jeah, auch noch Halbtranparenz;)).

Um dieses Problem zu lösen musst du zu erst sichergehen, dass du mit TrueColor-Bildern arbeitest. Mit Palettenbildern kann das nicht funktionieren.
Dann musst du noch sichergehen, dass beim Zielbild saveAlpha auf true ist (ist meines Wissens nach per default auf false).
Sicherheitshalber solltest du auch noch alphaBlending auf true setzten.

Bei TrueColor-Bildern mit saveAlpha=true hat die Funktion imageColorTransparent keinen Effekt - ist auch logisch, da bei diesen Bildern keine Palette angelegt wird und deswegen auch nicht gespeichert wird, welche dieser Palettenfarben transparent ist...

Deswegen muss du bei dein neu angelegtes Bild auch noch transparent machen. Am einfachsten geht das mit imageFill und einer transparenten Farbe (imageColorAllocateAlpha) - hier hat PHP oder GD (ich weiß nicht welches, tippe aber auf GD) ein Problem mit Bildern mit kleiner Breite, deswegen arbeite ich mit imageFilledRectangle - da brauchst du hald noch deine Bildgröße. Dabei ist aber wichtig, dass alphaBlending hier auf false ist! Sonst wird gar nichts geändert.

Lange Rede kurzer Code, der funktionieren sollte:
PHP:
<?php

$polaroid = imagecreatefrompng("img/Polaroid4.png");

$image = imagecreatefrompng("img.png");
imagefilter($image, IMG_FILTER_GRAYSCALE);

$paperclip= imagecreatefrompng('img/paperclip.png');

$base = imagecreatetruecolor(268,355);
imageAlphaBlending($base, false);
imageFill($base, 0, 0, imageColorAllocateAlpha($base, 0, 0, 0, 127));
imageAlphaBlending($base, true);
imageSaveAlpha($base, true);

imagecopy($base,$image,9,31,0,0,300,300);
imagecopy($base,$polaroid,0,23,0,0,268,332);
imagecopy($base,$paperclip,200,2,0,0,62,123);

// ich pack den Header immer kurz vor die Ausgabe - dann kann man bei Fehlern schnell mit die() diesen auch sehen und der Brower sagt nicht "Das Bild ist fehlerhaft..."
header('Content-type: image/png');
imagepng($base);
?>
 
Zurück
Oben