2017-02-12 3 views
0

GD에서 동적 텍스트 데이터로 이미지를 만들고 상단 모서리에 로고를 넣으려고합니다. 이미지의 배경색은 전달 된 데이터에 따라 변경되므로 알파 채널이없는 이미지로 로고를 저장할 수 없습니다.투명 필름을 gd php에로드하지만 투명하게 보이지 않게하십시오.

imagefill()을 사용하여 이미지를 만들고 동적 배경색으로 채운 다음 imagettftext()를 사용하여 텍스트를 추가 한 다음 내 로고를로드하십시오. 이미지가없는 이미지로 로고를 가져 오는 데 문제가 있습니다. 배경색을 '투명'하게 유지합니다. 그래서 나는 imagefill()을 사용하여 동적 배경색을 설정하고 싶습니다. 그러나, 그것은 함께로드 된 투명도 배경을 유지하므로 투명도로 png의이 부분을 씁니다. 나는 그것이로드 된 후에 (대상 이미지의 배경을 설정하는 동일한 rgb를 사용하여) imagefill()을 로고에 호출 해 보았습니다. 그러나 이것은 아무 것도하지 않았습니다. 여기

$background = $_GET['background']; 
$data1 = $_GET['data1']; 
$data2 = $_GET['data2']; 
$r = $_GET['r']; 
$g = $_GET['g']; 
$b = $_GET['b']; 

$png_image = imagecreate(400, 200); 
$gd_text_color = imagecolorallocate($png_image, 255, 255, 255); 
$gd_background_color = imagecolorallocate($png_image, $r, $g, $b); 
imagefill($png_image, 0, 0, $gd_background); 

$text1 = "test test $data1"; 
$text2 = "test test again $data2"; 
$font = 'Lato-regular.ttf'; 
imagettftext($png_image, 18, 0, 20, 20, $gd_text_color, $font, $text1); 
imagettftext($png_image, 18, 0, 20, 50, $gd_text_color, $font, $text2); 

//trying to get this logo and place it in the corner. 
$logo = imagecreatefrompng("images/logo.png"); 
imagecopy($png_image, $logo, 10, 10, 0, 0, 100, 30); 

header('Content-type: image/png'); 
imagepng($png_image, $filename); 
imagedestroy($png_image); 

그 코드의 출력은 다음과 같습니다 : 아래

내 코드입니다 http://i.imgur.com/3OIRupN.png

사람을합니까 : 여기 http://i.imgur.com/n25h9Js.png 그리고 이미지가 알파 채널을 허용하는 프로그램에로드 할 때의 모습입니다 내가 뭘하려고하는지 어떻게 알았지?

감사합니다.

편집

시도하고 내가 여기에 원하는 것은 다른 이미지와 설명합니다. 상단 이미지는 현재 내가 얻은 것이며, 하단 이미지는 내가 원하는 것입니다. 나는 단순히 다른 색깔의 배경의 꼭대기에 앉을 수있는 투명한 PNG를로드하려고합니다. 그러나 나는 그것이 (알파 채널이 보지 않는 것 같기 때문에) 여기에 (투명한 배경) 또는 검은 배경으로 보여지는 것과 같이 그것을 얻는다. 희망이 도움이됩니다. 이미지 : Error on top, mocked up version of how I want it below.

편집 아래의 주석 사항에 따라 2

, 나는() 지금은 잘 작동 imagecreatetruecolor에 사용 ImageCreate()에서 변경! 나는 누군가가 시간을 가졌다면 이것을 해결 한 이유에 대한 설명을 좋아할 것이다. 그러나 지금은이 질문을 보면서 시간을 보냈거나 심지어 보냈던 모든 사람들에게 감사한다.

+2

최종 이미지에 투명성이 있는지 여부에 관계없이 실제로 무엇을하려고하는지 잘 모르겠습니다. 그러나'imagecreate()'는 팔레트 화 된 이미지를 생성 할 때 문제를 일으킬 수 있습니다. 아마도'imagecreatetruecolour()'가 필요할 것입니다. –

+1

imagecreatetruecolor (영국 버전 아님!) –

+0

투명도가없는 이미지를 만들려고합니다. 정확합니다. 나는 나의 설명이 혼란 스러울 것 같아서 나에게 또 다른 한 가지를 가지게 될 것이다. 최종 이미지의 배경색은 입력 데이터에 의존 할 것이므로 최종 이미지의 배경색이 같은 "로고"이미지를 만들 수는 없다. 그래서 투명도가있는 PNG로로드하고 있습니다. 왼쪽 상단에 '배치'하여 동적 배경색의 꼭대기에 놓기를 원합니다.하지만 GD는 이미지의 일부분을 투명하게 만듭니다. 원하지 않는 부분입니다. 메인 포스트에 현재 가지고있는 것과 내가 원하는 것을 보여주는 스크린 샷을 포함 시켰습니다. – poncho

답변

0

imagecreate()이 트루 컬러 이미지의 유연성 또는 폭이 넓은 팔레트 화 이미지를 생성 할 때 문제가 될 것으로 생각됩니다.

imagecreatetruecolor()으로 바꾸시기 바랍니다.

관련 문제