0

我正在尝试用新背景替换图像的背景。

输入图像将是一个绿盒图像,它应该将其绿色背景替换为透明,然后应该插入一个新的背景图像。

它应该是这样的

目前,我仍在努力用透明背景替换绿色像素,因为绿色像素 rgb 值正在发生变化,而不仅仅是一些静态 rgb 值。

这怎么可能存档?

<?php

// rgbs
$red = 44;
$green = 255;
$blue = 56;
$alpha = .45;

// input img
$img = imagecreatefromjpeg('./img.jpg');

// new background
$bg  = imagecreatefromjpeg('./bg.jpg');

// replace background
for ($y = 0; $y < imagesy($img); $y++) {
    for ($x = 0; $x < imagesx($img); $x++) {
        $rgb = imagecolorat($img, $x, $y);
        $pixel_color = imagecolorsforindex($img, $rgb);

        $oldR = ($pixel_color['red'] - $alpha * $red) /  (1 - $alpha);
        $oldG = ($pixel_color['green'] - $alpha * $green ) / (1 - $alpha);
        $oldB = ($pixel_color['blue'] - $alpha * $blue) / (1 - $alpha);

        // replace green with transparent
        $color = imagecolorallocate($img, $oldR, $oldG, $oldB);
        imagesetpixel($img, $x, $y, $color);
        imagecolortransparent($img, $color);
    }
}

// save new img
imagesavealpha($img, true);            
imagepng($img, './output.png');

?>
4

0 回答 0