Задать вопрос
@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?
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Решение пользователя hesy К ответам на вопрос (2)
@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
Ответ написан