PHP - ImageCopyMerge 分层图像

Posted

技术标签:

【中文标题】PHP - ImageCopyMerge 分层图像【英文标题】:PHP - ImageCopyMerge layered images 【发布时间】:2016-02-20 17:18:55 【问题描述】:

有人可以指出我的问题的正确方向吗? :)

我尝试做的是将两个图像合并为一个,将 PNG 作为目标,中间有一个透明形状,将 JPG 作为源,我想在 PNG 图像的后面并通过透明形状看到。

类似这样的:

源图片:

目的地图片:

期望的结果:

这是我迄今为止尝试过但没有奏效的方法:

$dest = Imagecreatefrompng('img/dest_bg.png');
$src  = Imagecreatefromjpeg('img/src.jpg');

Imagealphablending($dest, true);
Imagealphablending($src, true);
Imagesavealpha($dest, true);

Imagecopymerge($dest, $src, 200, 0, 0, 0, 400, 415, 100);

imagepng($dest......

我试过反之亦然,但透明的星形呈白色或棕色像素化颜色。

【问题讨论】:

这是预期的结果图像 [3]:i.stack.imgur.com/Zj2Ze.jpg 【参考方案1】:

我已经设法用这个函数做到了 imagecopymerge_alpha

这里是代码

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


            $dest = Imagecreatefrompng('img/final_bg.png');
            $src2 = Imagecreatefromjpeg('uploads/picture.jpg');
            $src = Imagecreatefrompng('img/pink_bg.png');

            Imagealphablending($dest, true);
            Imagealphablending($src, true);
            Imagesavealpha($dest, true);


            Imagecopymerge($src, $src2, 310, 120, 0, 0, 200, 200, 100); // i have positioned a small picture on a color filled background in the middle because the final background, witch is a picture with a transparent shape in the middle 
            imagepng($src, 'uploads/temp.png');
            Imagedestroy($src2);
            Imagedestroy($src);
            $temp =  Imagecreatefrompng('uploads/temp.png');

            Imagealphablending($temp, false);
            Imagecopymerge_alpha($temp, $dest, 0, 0, 0, 0, 800, 420, 100); //merged the color filled background with the picture on it with the final background here..


            imagejpeg($temp, 'uploads/final_result.jpg');
            Imagedestroy($dest);
            Imagedestroy($temp);

【讨论】:

以上是关于PHP - ImageCopyMerge 分层图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP imagecopymerge() 将源文件合并到目标的非透明区域?

PHP的图像应用技术

利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验

php之图片处理类缩略图加水印

创建一个带有图像的盒子

CSS - 继承分层背景图像