2010-07-28 4 views
5

J'ai deux fichiers PNG, "red.png" et "blue.png"; ils sont tous les deux transparents, mais il y a quelques pixels de taches rouges ou bleues à différents endroits. Je veux faire un script PHP qui fusionne les deux; il devrait être aussi simple que quelque chose comme:PHP + GD: imagecopymerge ne retient pas les transparents PNG

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

Quand je lance ce script, tout ce que je reçois est les points bleus - avec la transparence perdue. J'ai vu que je devrais ajouter ces:

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

(sur l'original et la superposition?) Et cela ne semble pas aider tout.

J'ai vu quelques solutions de contournement sur PHP.net, quelque chose à la hauteur 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)); 

, qui devrait convertir le PNG à une image « TrueColor » et à maintenir la transparence. Cela semble le faire, mais maintenant tout ce que je vois est bleu sur un fond noir.

Qu'est-ce que je fais ?!

Répondre

6

Cela fonctionne parfaitement pour moi:

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

version PHP 5.3.2
GD Version 2.0
libpng Version 1.2.42

Avez-vous essayé d'enregistrer l'image dans un fichier et vérifier que ?

+0

Totalement travaillé. Merci beaucoup! Je devais encore utiliser imagealphablending et imagesavealpha. –

Questions connexes