2013-03-29 1 views
0

이것은 내 마음을 울리고 있습니다. 2 개의 투명한 PNG를 병합하고 싶습니다.GD2 - 두 개의 투명한 이미지를 복사하면 검은 색 배경이됩니다.

하나는 정사각형 이미지에서 즉시 생성 된 원 ($ 소스)입니다. 두 번째는 첫 번째 뒤에 맞는 투명 원이있는지도 표식 ($ 표시 자)입니다.

imagepng ($ source); 및 imagepng ($ 표시 자); 예상대로 출력 할 수 있습니다. 투명 배경이 있습니다.

는 그때 함께 모두 배치 할 빈 투명 이미지를 마커의 크기를 만들 :

결과에서
//NEW BLANK TRANSPARENT IMAGE 
$dest = imagecreatetruecolor(50, 61); 
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127); 
imagefill($dest, 0, 0, $transparent); 
imagealphablending($dest, true); 
imagesavealpha($dest,true); 

//COPY THE CIRCLE  
imagecopy($dest, $source, 5, 5, 0, 0, 41, 41); 

//AND THE MARKER ON TOP 
imagecopy($dest, $marker, 0, 0, 0, 0, 50, 61); 

, 원 내부 원과 검은 색 사각형으로 표시됩니다. $ source와 $ dest에 imagealphablending과 imagesavealpha의 조합을 많이 시도했지만 아무 것도 작동하지 않는 것 같습니다.

검은 사각형을 제거하고 병합 전에 $ 소스를 결과에 그대로 둘 수 있습니까? 여기

+0

나는 2 개의 투명한 이미지로 코드를 시도했고 그것은 나를 위해 일했습니다. 'imagecolortransparent ($ dest, $ blackColor);로 해봤습니까? – Uby

+0

그냥 해냈어. 사진 속의 다른 흑인과 충돌 할 수는 있지만. 아직도 작동하지 않았다. – Bruno

+0

여기의 문제는 원 마스크에 있습니다. 그것은 자신의 작품을 잘 작동하지만, 다른 이미지에 복사하면 검은 배경이 추가됩니다. – Bruno

답변

0

문제였다 :

, 나는 그것이 빨간색 만들기 다음 빨간색 투명을 원형 마스크를 생성하고 모든 다른 투명하고 있었다 즉석에서 원을 생성합니다. gd 엔진이 투명 색상을 무시하고 대신 전체 알파 채널을 저장한다는 점에서 imagesavealpha (true)와 호환되지 않습니다.

두 이미지를 병합 할 때 한 번 투명 해지는 색상이 이제 검은 색이됩니다.

제 경우의 해결책은 픽셀 당 픽셀을 분석하여 원형 방정식을 사용하여 원 안에있는 경우 빈 이미지로 복사하는 것입니다.