如何使用PHP合并jpg和png图像?

时间:2015-06-24 06:05:15

标签: php php-gd

这是png图片:

enter image description here

这是jpg图片:

enter image description here

两者的宽度和高度相同。

预期产出:

enter image description here

我正在使用的代码:

<?php
header('content-type: image/jpeg');
if(isset($_GET['source'])){
$source = $_GET['source'] ;
$watermark = imagecreatefrompng('png.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);

$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);

imagecopymerge($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100  );
imagepng($image);

}
?>

当前输出:

enter image description here

你能帮助我获得预期的输出吗?

1 个答案:

答案 0 :(得分:2)

您必须启用Alpha通道。要使用合并功能并保留Alpha通道,您可以使用此处发布的功能:http://de2.php.net/manual/en/function.imagecopymerge.php#92787

您的代码如下所示:

header('content-type: image/png');

   function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
        // creating a cut resource
        $cut = imagecreatetruecolor($src_w, $src_h);

        // copying relevant section from background to the cut resource
        imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);

        // copying relevant section from watermark to the cut resource
        imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);

        // insert cut resource to destination image
        imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
    }


$source ='b.jpg';
$watermark = imagecreatefrompng('a.png');
$watermark_height = imagesy($watermark);
$watermark_width = imagesx($watermark);

$image = imagecreatetruecolor($watermark_width,$watermark_height);
$image = imagecreatefromjpeg($source);

imagecopymerge_alpha($image, $watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, 100  );
imagepng($image);

否则,Alpha通道会填充颜色,背景会完全填满。

小心:你还混合了内容类型的image / jpeg和输出函数imagepng。 (我在我的解决方案中选择了image / png&amp; imagepng。)