PHP GD,全彩色JPG上的透明PNG

时间:2011-10-27 22:24:02

标签: php gd

我正在尝试为网站创建自定义横幅广告头像。下图显示了需要发生的事情:

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将保持透明!但是一旦我尝试将两者放在一起,它就会使透明度成为完美的黑色。

有什么建议吗?

1 个答案:

答案 0 :(得分: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时,您可以为您的头像的实际比例添加一些计算宽度/高度。上面的代码只会调整头像大小以适应叠加大小。