2010-07-28 12 views
5

Ho due file PNG, "red.png" e "blue.png"; sono entrambi per lo più trasparenti, ma in alcuni punti vi sono alcuni pixel di macchie rosse o blu.PHP + GD: imagecopymerge che non conserva i lucidi PNG

Voglio fare uno script PHP che unisce i due; dovrebbe essere semplice come qualcosa di simile 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); 

Quando ho eseguito questo script, tutto quello che ottiene è i punti blu - con la trasparenza perduta. Ho visto che dovrei aggiungere questi:

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

(sia l'originale e la sovrapposizione?) E che non sembra aiutare qualsiasi.

ho visto un paio di soluzioni alternative sul PHP.net, qualcosa per la somma di:

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

, che dovrebbe convertire il PNG per un'immagine "TrueColor" e mantenere la trasparenza. Sembra che lo faccia, ma ora tutto quello che vedo è blu su sfondo nero.

Cosa devo fare ?!

risposta

6

Questo funziona perfettamente per me:

$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 versione 5.3.2
GD versione 2.0
libPNG Versione 1.2.42

Hai provato salvare l'immagine in un file e controllando che ?

+0

Completamente funzionante. Molte grazie! Dovevo ancora usare imagealphablending e imagesavealpha. –