2013-03-06 1 views
14

GD와 함께 PHP에서 다음 작업을 수행하려고합니다. ImageMagick은 불행히도 옵션이 아닙니다. 그러나 이것은 일반적인 문제인 것처럼 보입니다. 은 해결책이 될을 가지고 있습니다. 찾을 수없는 것 같습니다.PHP/GD - 투명 배경

투명한 배경으로 PNG를 만들고 싶습니다. 그런 다음 직사각형을 그려서 이미지를 복사하고 텍스트를 추가하고 싶습니다. 이 검은 색이 될 수있는 복사 된 이미지의 일부를 제외하고 잘 작동, 및/또는 텍스트가 검은 색 수 있습니다

$image = ImageCreateTrueColor (800, 600); 
imagecolortransparent ($image, 0); //0 is pure black, the default fill color 
imagerectangle (...); 
//code to copy an image 
imagettftext ($image, ...); 
imagepng ($image); 

다음과 같이이 일을하는 한 가지 방법이다. 이것은 또한 투명하게됩니다. 이것은 내가 이 아니며이 필요합니다.

imagefill ($image, 0,0, 0x7FFF0000); 
imagetransparent ($image, 0x7FFF0000); 

위의 코드는 내가 온라인에서 찾은 것으로 빨간색으로 채우고 빨간색을 투명하게 만듭니다. 다시 말하지만 이미지의 모든 빨간색이 투명 해집니다. 나는 발생할 가능성이 낮은 색상을 선택할 수는 있지만이를 보장 할 수는 없습니다.

내가 누락 된 자료가 있습니까? 이 문제를 해결할 수 있습니까? 답장을 보내 주셔서 감사합니다.

답변

26

imagecolortransparent은 단색 투명도가 좋지 않기 때문에 이미지를 병합하는 경우 여기에 원하는 것과 다를 수 있습니다.

대신과 같이 투명한 채우기 마스크를 시도 :

<?php 
$image = imagecreatetruecolor(100, 100); 

// Transparent Background 
imagealphablending($image, false); 
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparency); 
imagesavealpha($image, true); 

// Drawing over 
$black = imagecolorallocate($image, 0, 0, 0); 
imagefilledrectangle($image, 25, 25, 75, 75, $black); 

header('Content-Type: image/png'); 
imagepng($image); 
+0

imagealphablending 기본값을 true로 트루 컬러 이미지에이 또한 : 다른 아무것도하지 않는다, 그래서 imagecreatetruecolor는 왜있는 검은 이미지를 생성 코드의 첫 번째 부분은 imagecolortransparent (0); – Spinal

+0

이 경우, 귀하의 문제를 보지 못했습니다. 나는 센터에서 검은 색 직사각형을 그려서 위를 테스트했으며 주변의 투명도로 잘 작동합니다. –

+0

정말요? 다음 코드를 시도해 보면 주변에 검은 색 사각형이 생기므로 뭔가 잘못된 것 같습니다. $ image = imagecreatetruecolor (800,600); imagealphablending ($ image, true); imagefilledrectangle ($ 이미지, 50, 50, 750, 550, imagecolorallocate ($ image, 0,0,128)); 헤더 ('Content-type : image/PNG'); imagepng ($ 이미지); – Spinal