2011-10-27 13 views
1

私はウェブサイトのためのカスタム見栄えのバナーのアバターを作成しようとしています。下の画像は発生する必要があるかを示しています。PHP GD、フルカラーの透明なPNGのontop 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); 

をしてimagepng($transBanner);への最後の行を変更し、透過PNGは透明のままになります!私は2つを配置しようと、それは透明性の完璧な黒の色になり。

提案がありますか?

+0

私は[ワイドイメージ](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

これは、wideimageと多くのパラメータで設定できます。そして、あなたはそれを1回でも多くでもやり遂げることができます。 – 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); 

$imgBanner$imgAvatarをコピーするときは、自分のアバターの実際の規模のための幅/高さにいくつかの計算を追加することができます。上のコードは、オーバーレイサイズに合わせてアバターのサイズを変更するだけです。

関連する問題