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