2011-10-27 176 views
1

我正在嘗試爲網站創建自定義橫幅頭像。下圖顯示了需要採取什麼措施:PHP GD,全綵色透明PNG ontop JPG

Image to display

正如你所看到的,我有一個半透明PNG,用戶提供的圖像,我想提出的第三圖像。

,我至今寫的代碼是:

$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); 

它輸出的東西像什麼如下所示:

Bad Image

我顯然還必須使用戶提供的圖像正確的大小,這是一個簡單的數學問題 - 現在,我必須使透明度保持透明!

如果我冒了出來:

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

最後一行更改爲imagepng($transBanner);,透明PNG將保持透明!但一旦我嘗試把兩者結合起來,這使得透明度完美的黑色。

有什麼建議嗎?

+0

我認爲[wideimage](http://wideimage.sourceforge.net/)已經有了這個,無論是'merge'還是'mask',都可以看到這個demo: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

您可以使用wideimage和許多參數進行配置。你可以做一次或者多次。 – hakre

回答

0

我前段時間做了類似的事情。在那裏我用了一個真實的彩色圖像。只要創建一個新的形象和複製每個(頭像和疊加)的調整版本到它:

<?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); 

複製$imgAvatar$imgBanner時,可能會增加一些計算,以寬/高爲您的虛擬形象的真正規模。上面的代碼只會調整頭像的大小以適應覆蓋尺寸。