2011-10-27 115 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时,可能会增加一些计算,以宽/高为您的虚拟形象的真正规模。上面的代码只会调整头像的大小以适应覆盖尺寸。