2014-09-26 18 views
0

저는 PHP 파일에서 GET으로 전달 된 등급의 등급 표시 절차를 구현하려고했습니다.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

내가 얻을를 다음 결과 :

최종 이미지에서 비정상적인 배경이 될 수있는 오류는 무엇입니까?

가능한 해결 방법을 알려주십시오.

미리 감사드립니다.

답변

1

투명도가있는 24 비트 PNG 이미지 인 것처럼 보입니다. 투명도 정보를 저장하려면 GD에 알려야합니다. 추가 :

imagesavealpha($dst_im, true); 

을 내가 imagecopy 전에했던

+0

이미지 렌더링하기 전에(); –

+0

그리고 ... 작동합니다! :) imagecopy()가 혼자 작동하지 않는 이유를 말해 줄 수 있습니까? 두 이미지의 투명 영역이 동일한 경우 왜 그런 현상이 발생합니까? –

+0

'imagecopy '는 할 일을하지만 GD는 저장할 때 기본적으로 알파 값을 보존하지 않습니다. GD 작성자가이 행동을 선택한 이유는 무엇입니까? 나는 모른다. –

관련 문제