2010-07-28 20 views
5

İki PNG dosyasına sahibim "red.png" ve "blue.png"; ikisi de çoğunlukla saydamdır, ancak çeşitli yerlerde birkaç piksel kırmızı veya mavi lekeler vardır.PHP + GD: imagecopymerge PNG asetatlarını tutmuyor

İkisini birleştiren bir PHP betiği yapmak istiyorum; - kayıp şeffaflık ile bu komut dosyasını çalıştırdığınızda

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

, elime mavi noktalar var, ne gibi bir şey kadar basit olmalıdır. (? Özgün ve bindirme hem)

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

Ve bu herhangi yardımcı olmak için görünmüyor: Ben bu eklemek gerekir gördük.

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

, bir "gerçek renkli" imajına PNG dönüştürmek ve şeffaflığı muhafaza etmelidir:

Ben, php.net üzerinde ayarlamak için bir şeyler birkaç geçici çözümler gördük. Öyle görünüyor, ama şimdi tek gördüğüm siyah bir arka plan üzerinde mavi.

Ne yapabilirim?

cevap

6

Bu benim için mükemmel çalışıyor:

$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 Sürüm 5.3.2
GD Sürüm 2.0
libpng Versiyon 1.2.42

bir dosyaya görüntü kaydetme ve denetleme denediniz ?

+0

Tamamen çalıştı. Çok teşekkürler! Hala imagealphablending ve imagesavealpha kullanmak zorunda kaldım. –

İlgili konular