PHP - 用新背景替换图像背景?

时间:2013-05-22 12:47:17

标签: php imagemagick gd php-gd

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

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

它应该是那样的

目前我还在用透明背景替换绿色像素,因为绿色像素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');

?>

0 个答案:

没有答案