2014-09-26 40 views
0

我一直在嘗試實施評級顯示程序,以通過在PHP文件中傳遞的星星形式進行評級。Imagecopy不能正常工作

下面的代碼爲rate.php:

$filename= "rating.png"; 
$rating = $_GET['rating']; 
list($w, $h, $type, $attr) = getimagesize($filename); 
$src_im = imagecreatefrompng($filename); 
$dst_im = imagecreatefrompng("rating_back.png"); 
$src_x = '0'; // begin x 
$src_y = '0'; // begin y 
$src_w = $w * $rating/5; // width 
$src_h = $h; // height 
$dst_x = '0'; // destination x 
$dst_y = '0'; // destination y 
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h); 
header("Content-type: image/png"); 
imagepng($dst_im); 
imagedestroy($dst_im); 

$rating是一個浮點值,如每GET請求。 但是當我嘗試使用下面的圖像來實現rate.php?rating=4.3

「rating.png」:

rating.png

「rating_back.png」:

rating_back.png

我得到的以下結果:

enter image description here

可能導致最終圖像背景異常的錯誤是什麼?

請給出可能的解決方案。

在此先感謝:)

回答

1

它看起來像那些是24位PNG圖像與透明度。您需要告訴GD保存透明度信息。地址:

imagesavealpha($dst_im, true); 

渲染圖像

+0

我imagecopy的以前做過前(); – 2014-09-26 17:53:28

+0

而且...它的工作原理! :) 但你能告訴我爲什麼imagecopy()不能單獨工作? 這兩個圖像都有相同的透明區域,那麼爲什麼會發生這種情況? – 2014-09-26 17:59:52

+0

'imagecopy'完成它應該做的事情,但GD在保存時不會保存默認的alpha值。爲什麼GD作者選擇這種行爲?我不知道 – 2014-09-26 18:10:37