2011-03-11 5 views
1

투명 배경에 흰색 모양의 세트 인 png가 있습니다. 나는 투명 배경을 유지하면서 도형의 색상으로 변경하려고합니다. 아래의 코드를 사용하여 색상을 변경하지만 검정색 배경으로 결과를 실험하고 있습니다. imagetruecolortopalette가 문제를 일으키는 것 같지만 그 줄을 제거하면 색이 바뀌지 않습니다. 제안 사항이 있습니까?투명도를 유지하면서 GD를 사용하여 투명 배경에서 한 색상 모양의 색상을 변경하십시오.

<?php 
$imgname = "whiteim.png"; 
$im = imagecreatefrompng ($imgname); 

imagetruecolortopalette($im,false, 255); 

$index = imagecolorclosest ($im, 255,255,255); // get White COlor 
imagecolorset($im,$index,255,0,0); // SET NEW COLOR 

$imgname = "result.png"; 
imagepng($im, $imgname); // save image as png 
imagedestroy($im); 

?> 

답변

0

한 가지는 내가 작업 중 하나 imagetruecolortopalette를 사용하는 것을 만들 수 없습니다입니다. 귀하의 케이스에서 imagefill 함수를 사용할 수 있는지 확실하지 않습니다 (채우기를 시작할 위치를 알아야하며 한 영역의 흰색 영역이있는 경우 작동합니다). 그러나 이것은 내가 사용한 것입니다.

다른 것은 알파 정보를 png 이미지에 저장하기 전에 imagesavealpha으로 전화해야한다는 것입니다. 그렇지 않으면 손실됩니다. 왜 그것이 기본 설정이 아닌지 알려주지 못합니다.

모두 모두

, 내 방식이었다 : imagecolortransparent 지정된 색상을 만들기 때문에

$imgname = "whiteim.png";.                                 
$im = imagecreatefrompng ($imgname);                              

imagefill($im, 0,0, imagecolorallocate($im, 255,0,0));                         

$imgname = "result.png";                                 
imagesavealpha($im, True);                                
imagepng($im, $imgname); // save image as png                           
imagedestroy($im); 
+0

나를 위해 작동하지 않았다. 어쩌면 내 이미지와 관련이 있을까요? (붙여진). 아래의 코드는 완벽하게 작동하지만 이유를 이해할 수 없습니다. 그것은 당신이 $ xxxx를 대체해도 상관없이 작동합니다. 내가 그 라인을 지우면 작동하지 않니? 왜 그걸 알아? – Kwanzz

1
@ imagecolortransparent($im, $xxxx); //not sure why this works 

내가이 일을 생각 값이 포함되지 않습니다이 경우 $의 XXXX에, 투명 (당신이 $ xxxx를 배치 곳). 따라서 투명하게 만들어지는 것은 색상 값이없는 모든 픽셀입니다.

관련 문제