2010-07-28 14 views
5

Ich habe zwei PNG-Dateien, "red.png" und "blue.png"; sie sind beide meist durchsichtig, aber an einigen Stellen gibt es einige Pixel mit roten oder blauen Flecken.PHP + GD: imagecopymerge nicht beibehalten PNG-Folien

Ich möchte ein PHP-Skript machen, das die beiden zusammenführt; es sollte so einfach wie so etwas wie:

$original = getPNG('red.png'); 
$overlay = getPNG('blue.png'); 

imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original), 100); 
header('Content-Type: image/png'); 
imagepng($original); 

Wenn ich dieses Skript ausführen, sehe ich nur die blauen Punkte - mit dem verlorenen Transparenz. Ich sah, dass ich diese hinzufügen soll:

imagealphablending($original, false); 
imagesavealpha($original, true); 

(sowohl auf das Original und die Overlay?) Und das scheint nicht zu helfen.

sah ich ein paar Workarounds auf PHP.net, etwas nach der Melodie:

$throwAway = imagecreatefrompng($filename); 
imagealphablending($throwAway, false); 
imagesavealpha($throwAway, true); 
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway)); 
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway),  imagesy($throwAway),   imagesx($throwAway), imagesy($throwAway)); 

, die die PNG auf ein „True Color“ Bild umwandeln soll und Transparenz beibehalten. Es scheint so zu sein, aber jetzt sehe ich nur noch Blau auf schwarzem Hintergrund.

Was mache ich ?!

Antwort

6

Das funktioniert perfekt für mich:

$img1 = imagecreatefrompng('red.png'); 
$img2 = imagecreatefrompng('blue.png'); 

$x1 = imagesx($img1); 
$y1 = imagesy($img1); 
$x2 = imagesx($img2); 
$y2 = imagesy($img2); 

imagecopyresampled(
    $img1, $img2, 
    0, 0, 0, 0, 
    $x1, $y1, 
    $x2, $y2); 

imagepng($img1, 'merged.png', 0); 

PHP Version 5.3.2
GD Version 2.0
libpng Version 1.2.42

Haben Sie versucht, das Bild in einer Datei speichern und prüfen, ob ?

+0

Total funktioniert. Danke vielmals! Ich musste noch Imagealpblending und Imagesavealpha verwenden. –