Как выделить только один цвет на изображении с помощью PHP? - PullRequest
3 голосов
/ 18 сентября 2010

Можно ли оставить (изолировать) только один цвет на изображении? В данный момент меня интересует зеленый цвет: 005d00

Ответы [ 2 ]

2 голосов
/ 18 сентября 2010

Вы можете использовать функцию imagecolorat() от GD.
Просто выполните итерацию по каждому пикселю, проверьте, какой это цвет, который вы хотите, в противном случае установите на черный или белый или что вы хотите с ним сделать.

Вот рабочий пример:

function colorEquals($rgb_color, $hex_color)
{
    $r = ($rgb_color >> 16) & 0xFF;
    $g = ($rgb_color >> 8) & 0xFF;
    $b = $rgb_color & 0xFF;


    list($hr, $hg, $hb) = sscanf($hex_color, '%2s%2s%2s');
    $hr = hexdec($hr);
    $hg = hexdec($hg);
    $hb = hexdec($hb);

    return $r == $hr && $g == $hg && $b == $hb;
}

$width = 300;
$height = 300;

// create 300x300 image
$img = imagecreatetruecolor($width, $height);
// fill grey
$color = imagecolorallocate($img, 127, 127, 127);
imagefill($img, 0, 0, $color);

// set a square of pixels to 005d00
$your_color = imagecolorallocate($img, 0, 93, 0);
imagefilledrectangle($img, 10, 10, 100, 100, $your_color);

$white = imagecolorallocate($img, 255, 255, 255);

for($x = 0; $x < $width; ++$x)
{
    for($y = 0; $y < $height; ++$y)
    {
        $color = imagecolorat($img, $x, $y);
        if(!colorEquals($color, '005d00'))
        {
            // set it to white
            imagesetpixel($img, $x, $y, $white);
        }
    }
}

// output
header('Content-type: image/png');
imagepng($img);
1 голос
/ 19 ноября 2010

Ну, вы можете сделать это, используя ImageMagick через командную строку:

convert original.png -matte ( +clone -fuzz 1 -transparent #005d00 ) -compose DstOut -composite isolated.png

Команда -fuzz может принимать процентное отклонение от цвета, если оно конкретное, отбросить фазз.

Скобки () необходимо экранировать в bash shell \ (\) и т. Д.

...