Задать вопрос
@hesy

Удалить белый цвет и его оттенки с помощью PHP?

Есть изображение:
Изображение
BaXwDlP.png

Пробовал сделать таким образом:
$filename = 'path/to/image.png';
$color = '255,255,255';

$img = imagecreatefrompng($filename); 
$colors = explode(',', $color);
$remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]);
imagecolortransparent($img, $remove);

imagepng($img, $filename);

Результат
sMcWUA8.png


Вопрос: как залить белый цвет (и его оттенки), чтобы остались только буквы/цифры с помощью GD?
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
@topuserman
Чтобы удалить белый цвет и его некоторые оттенки, достаточно

var coff = 200;
if( (r + g + b) / 3 > coff )
удаляемБелыйЦвет();

// r, g, b - соответствующие яркости цвета пикселя
Можете менять значение коэффициента от 0 до 255, чем больше значение, тем ярче пиксели будут удаляться.
Ответ написан
Комментировать
@hesy Автор вопроса
Сам задал, сам отвечаю...

Осторожно, безумное решение:
1. Берем картинку
2. Идем по каждому пикселю
3. Если $r > 210 and $g > 210 and $b >210 красим его в черный
4. В конце делаем черный цвет прозрачным
5. ???
6. PROFIT

Код
$filename = 'data/output/test.png';

$image = imagecreatefrompng($filename);

$black = imageColorAllocate($image, 0, 0, 0);
 
$size = getimagesize($filename);
$w = $size[0];
$h = $size[1];

for ($x=0; $x < $w; $x++){
    for ($y=0; $y < $h; $y++){
    
        $color = imagecolorat($image, $x, $y);

        $r = ($color >> 16) & 0xFF;
        $g = ($color >> 8) & 0xFF;
        $b = $color & 0xFF;
        
        if ($r > 210 and $g > 210 and $b > 210){
            imagesetpixel($image, $x , $y, $black);
        }
    }
}

imagecolortransparent($image, $black);

$res_path = 'data/output/result.png';

imagepng($image, $res_path, 9, NULL);
imagedestroy($image);

Результат
C3yibIP.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы