PHP - Replace colour within image

前端 未结 2 834
猫巷女王i
猫巷女王i 2020-12-01 17:29

I hope someone can help,

I have made a script that masks images... however it is reliant on a colour to mask with ( \'green screen\' style). The trouble is if the im

2条回答
  •  抹茶落季
    2020-12-01 18:06

    You need to open the input file and scan each pixel to check for your chromokey value.

    Something like this:

    // Open input and output image
    $src = imagecreatefromJPEG('input.jpg') or die('Problem with source');
    $out = ImageCreateTrueColor(imagesx($src),imagesy($src)) or die('Problem In Creating image');
    
    // scan image pixels
    for ($x = 0; $x < imagesx($src); $x++) {
        for ($y = 0; $y < imagesy($src); $y++) {
            $src_pix = imagecolorat($src,$x,$y);
            $src_pix_array = rgb_to_array($src_pix);
    
                // check for chromakey color
                if ($src_pix_array[0] == 0 && $src_pix_array[1] == 0 && $src_pix_array[2] == 255) {
                    $src_pix_array[2] = 254;
                }
    
    
            imagesetpixel($out, $x, $y, imagecolorallocate($out, $src_pix_array[0], $src_pix_array[1], $src_pix_array[2]));
        }
    }
    
    
    // write $out to disc
    
    imagejpeg($out, 'output.jpg',100) or die('Problem saving output image');
    imagedestroy($out);
    
    // split rgb to components
    function rgb_to_array($rgb) {
        $a[0] = ($rgb >> 16) & 0xFF;
        $a[1] = ($rgb >> 8) & 0xFF;
        $a[2] = $rgb & 0xFF;
    
        return $a;
    }
    

提交回复
热议问题