2010-07-28 12 views
5

Tengo dos archivos PNG, "red.png" y "blue.png"; ambos son en su mayoría transparentes, pero hay algunos píxeles de manchas rojas o azules en varios lugares.PHP + GD: imagecopymerge no conserva transparencias PNG

Quiero hacer un script PHP que combine los dos; debe ser tan simple como algo parecido a:

$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); 

Cuando ejecuto este script, lo único que consigue es los puntos azules - con la transparencia perdida. Vi que debo añadir siguientes:

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

(tanto en el original como la superposición?) Y eso no parece ayudar a cualquier.

vi algunas soluciones en PHP.net, algo por una suma de:

$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)); 

, que debe convertir el PNG en una imagen de "color verdadero" y conservar la transparencia. Parece que sí, pero ahora todo lo que veo es azul sobre fondo negro.

¿Qué hago ?!

Respuesta

6

Esto funciona perfectamente para mí:

$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 versión 5.3.2
GD versión 2.0
libPNG Versión 1.2.42

¿Usted ha intentado guardar la imagen en un archivo y comprobar que ?

+0

Totalmente trabajado. ¡Muchas gracias! Todavía tenía que usar imagealphablending e imagesavealpha. –