在PHP中使用透明度合并两个图像

我试图通过php用背景透明度制作几个.png的合成图像,并将得到的图像存储在我的数据库中.我的问题是,当合并图像时,我的图像的透明部分被丢弃.

这是我创建合成图像的代码:

    $base = imagecreatefrompng('application/assets/images/vel1_bg.png');
    imagealphablending($base, true);
    list($baseWidth, $baseHeight, $type, $attr) = getimagesize('application/assets/images/vel1_bg.png');

    $user_board_items = $this->config->item('user_board_items');

    foreach($array as $key => $value){
        $item = imagecreatefrompng('application/assets/images/items/' . $user_board_items[$value[0]] . '.png');         
        imagealphablending($item, true);
        list($width, $height, $type, $attr) = getimagesize('application/assets/images/items/'. $user_board_items[$value[0]] . '.png');

        imagecopymerge($base,
                    $item,
                    floor(($value[1] / 100) * $baseWidth),
                    floor(($value[2] / 100) * $baseHeight),
                    0,
                    0,
                    $width,
                    $height,
                    100);
        imagedestroy($item);
    }

    //We have to capture the output buffer
    ob_start();
    imagepng($base);
    $baseimg = ob_get_clean();

这会生成如下图像:

我正在寻找更像这样的东西:

(注意如何表示透明部分)

解决方法:

不要使用imagecopymerge()来合并透明图像.

最好在脚本中使用imagecopyresampled().

上一篇:PHP – 使用imagecopy时颜色不正确


下一篇:从PHP / GD中的资源获取图像mimetype?