2011-10-27 2 views
1

나는 웹 사이트에 대한 사용자 정의 찾고 배너 아바타를 만들려고합니다. 아래 이미지는 일어날 필요가 무엇인지 보여줍니다전체 색상의 PHP GD, 투명 PNG 온톨 JPG

Image to display

당신이 볼 수 있듯이, 나는 반투명 PNG, 사용자가 제공 한 이미지를 가지고 있고이 세 번째 이미지를 만들 싶습니다.

내가 지금까지 작성한 코드는 다음과 같습니다

Bad Image

나는 분명히 여전히 사용자가 제공 한 이미지를 만들 필요가 :

$user_id = 1; 
$name_qry = mysql_query("SELECT a.*, b.* FROM mbr_user_name a, mbr_user_information b WHERE a.user_id = '$user_id' AND b.user_id = '$user_id'"); 
    while($row = mysql_fetch_array($name_qry)){ 

    $user_name = $row['user_name']; 
    $user_email = $row['user_email']; 
    $user_avatar = $row['user_avatar']; 
    } 

    $height = "208"; 
    $width = "199"; 
    $top_image = "../images/bannerShadow_cccccb.png"; 
    $image = imagecreatefrompng("." . $user_avatar); 
    $banner = imagecreatefrompng($top_image); 

     //Keeping the Banner Trasnparent 
     $transBanner = imagecreate($width, $height); 
     $color = imagecolorallocatealpha($transBanner, 0, 0, 0, 127); 
     imagefill($transBanner, 0, 0, $color); 
     imagecopyresampled($transBanner, $banner, 0, 0, 0, 0, $width, $height, $width, $height); 


    imagealphablending($transBanner, true); 
    imagecopymerge($image, $transBanner, 0, 0, 0, 0, 199, 208, 100); 



    imagepng($image); 

은 다음과 같습니다 어떤 식으로 뭔가를 출력 올바른 크기, 그건 단순한 수학 문제입니다 - 바로 지금 투명도를 유지해야합니다!

나는 밖으로 가지고가는 경우 :

imagealphablending($transBanner, true); 
imagecopymerge($image, $transBanner, 0, 0, 0, 0, 199, 208, 100); 

및 투명 PNG 투명 남아있을 것입니다, imagepng($transBanner);에 마지막 줄을 변경!하지만 난 함께 두 가지를 넣어하려고하면, 그것은 투명성에게 완벽한 검은 색을 만든다 .

제안 사항?

+0

[wideimage] (http://wideimage.sourceforge.net/)에는 이미 merge 또는 mask 중 하나가 있다고 생각합니다. http://wideimage.sourceforge.net/wp-content /current/demo/index.php?demo=merge&output=preset%20for%20demo&colors=255&dither=1&match_palette=1 - 크기도 변경할 수 있습니다. – hakre

+0

감사합니다.하지만 이미 워터 마크를 넣을 수 있습니다. 와이드 이미지가하는 일은 100 % 불투명 한 이미지를 찍은 다음 50 % 불투명도로 수행하고있는 작업을 정확하게 수행하고 있습니다. 또한이 웹 사이트에 올 모든 사용자에 대해이 작업을 수행해야합니다. – ntgCleaner

+0

와이드 이미지와 여러 매개 변수로 구성 할 수 있습니다. 그리고 당신은 한 번 또는 여러 번 할 수 있습니다. – hakre

답변

0

나는 얼마 전에 비슷한 것을했다. 나는 진정한 컬러 이미지를 사용했다. 그냥 새로운 이미지를 만들고 그것으로 각 (아바타 및 오버레이)의 크기를 조정 버전을 복사 $imgBanner$imgAvatar를 복사 할 때

<?php 
$imgOverlay = imagecreatefrompng('overlay.png'); 
$imgAvatar = imagecreatefrompng('avatar.png'); 

$width = imagesx($imgOverlay); 
$height = imagesy($imgOverlay); 

$imgBanner = imagecreatetruecolor($width, $height); 
imagecopyresampled($imgBanner, $imgAvatar, 0, 0, 0, 0, $width, $height, imagesx($imgAvatar), imagesy($imgAvatar)); 
imagecopyresampled($imgBanner, $imgOverlay, 0, 0, 0, 0, $width, $height, $width, $height); 

header('Content-type: image/png'); 
imagepng($imgBanner); 

당신은 아바타의 실제 규모의 너비/높이에 약간의 계산을 추가 할 수 있습니다. 위의 코드는 오버레이 크기에 맞게 아바타의 크기를 조절합니다.