PHP GD - blendmode alpha计算

时间:2018-03-11 16:51:15

标签: php gd alpha

如果我在imagecolorallocatealpha中更改alpha计算,则会出现问题 是不对的。

图片1:enter image description here

图片2:enter image description here

图3:enter image description here

图片4:enter image description here

图片5:enter image description here

1 - 3的照片放在一起,看起来像这样:

enter image description here

如果添加了图片4和5,它看起来像这样:

enter image description here

你现在可以看到身体上的金色鳞片和灰度,但那是错的。身体上的灰度不应该存在。

实际上,龙应该是这样的:

enter image description here

身体上的灰度应该是明亮的,金色的鳞片应该保持不变。

@Syscall已经帮助了this thread中的“alpha”功能,它运行良好,但现在我们认为“blendmode”函数是错误的。

function blendmode($dst, $src)
{
    $w = imagesx($src);
    $h = imagesy($src);

    for ($x = 0; $x < $w; $x++) {
        for ($y = 0; $y < $h; $y++) {
            $rgbDst = imagecolorsforindex($dst, imagecolorat($dst, $x, $y));
            $rgbSrc = imagecolorsforindex($src, imagecolorat($src, $x, $y));

            $r = min($rgbSrc['red'] + $rgbDst['red'], 255);
            $g = min($rgbSrc['green'] + $rgbDst['green'], 255);
            $b = min($rgbSrc['blue'] + $rgbDst['blue'], 255);

            imagesetpixel($src, $x, $y, imagecolorallocatealpha($src, $r, $g, $b, 204 / 255 * 105));
        }
    }

    return $src;
}

这就是龙与“混合模式”功能有关的样子:

enter image description here

1 个答案:

答案 0 :(得分:-1)

首先,我建议你不要坚持内置的图形库for php。

我会向你推荐ImageMagik(Imagick)或Intervention(http://image.intervention.io/)。

他们是更强大的图书馆。