2013-04-01 30 views
1

透明度,我有一個看起來像這樣的代碼:更好的質量與PNG PHP

<?php 
$imgl = "test/white.png"; 
$img2 = "test/1.png"; 

$dest = imagecreatefrompng($imgl); 
$src = imagecreatefrompng($img2); 
imagecolortransparent($src, imagecolorat($src, 0, 0)); 
imagecolortransparent($dest, imagecolorat($dest, 0, 0)); 

$src_x = imagesx($src); 
$src_y = imagesy($src); 
imagecopymerge($dest, $src, 0, 0, 0, 0, $src_x, $src_y, 100); 

// Output and free from memory 
header('Content-Type: image/png'); 
imagegif($dest); 

imagedestroy($dest); 
imagedestroy($src); 
?> 

此代碼合併圖像融合在一起,同時保持透明度。但是,此代碼保持圖像的透明度非常低,邊緣看起來非常粗糙。我想知道,有沒有一種方法可以保持圖像的透明度,但質量更好?但是,我仍然希望這個腳本完成相同的功能。

回答

2

它看起來像你輸出的圖像作爲GIF,而不是PNG。嘗試imagepng()而不是imagegif()

imagepng($dest); 
+0

嗯,我試過了,但它使圖像上的所有黑色輪廓/形狀都是透明的。 – user2154729

0

GIF只有1位alpha通道,這意味着它無法表示部分透明度。每個像素都是完全透明或完全不透明的。這是您的代碼的第一個潛在問題。

另一個是imagecolortransparent()設置單個顏色被解釋爲透明。這意味着只有具有的像素恰好那個顏色纔會透明。如果您需要平滑過渡,您可能需要自己實現實際的真彩色每像素透明度。