Как удалить белый фон с изображения с помощью Intervention Image

Загруженный пользователем файл изображения с почерком черными чернилами. Я хочу удалить фон и сохранить почерк как новое изображение .png. Используя Intervention Image, есть функция под названием trim(), которая звучит так, как будто она должна делать именно это, но не дает ожидаемых результатов.

Код:

$file = $request->file('employee_signature');

$name = $employee->givenname.'_'.$employee->surname.'_Signature.png';

$new_image = Intervention::make($file)->trim()->save('images/signatures/'.$name);

return $new_image;

$new_image должно возвращать изображение под названием "First_Last_Signature.png" и иметь только черный почерк. С моим текущим кодом он не обрезает белый фон. Я могу подтвердить, что он обрабатывается, потому что когда я загружаю .jpg, он сохраняется как .png в указанном каталоге.

На GitHub есть предложение, в котором говорится, что fill() должен работать, но я не могу его заставить.

Здесь в SOF есть решение, которое делает именно то, что я хочу, но не использует библиотеку Intervention Image: ССЫЛКА

В настоящее время я использую Imagemagick, однако библиотека GD также доступна, хотя в документах Intervention Image говорится, что GD будет использовать много ресурсов.


person Andrew Fox    schedule 15.08.2016    source источник


Ответы (3)


Есть решение, надеюсь поможет:

$file = $request->file('employee_signature');

$name = $employee->givenname.'_'.$employee->surname.'_Signature.png';

$mask = Intervention::make($file)
    ->greyscale(); // greyscale the signature image
    ->contrast(100); // increase the contrast to reach pure black and white
    ->contrast(50); // more contrast to ensure!
    ->trim('top-left', null, 40); // it's better to set a tolerance for trim()
    ->invert(); // invert it to use as a mask

$new_image = Intervention::canvas($mask->width(), $mask->height(), '#000000');
    ->mask($mask)
    ->save('images/signatures/'.$name);

return $new_image;
person Pourbahrami    schedule 05.11.2018

Возможно, вам повезет с прозрачным инструментом на LunaPic. Вы можете просто щелкнуть цвет фона, который хотите удалить, а затем при необходимости отрегулировать резкость. http://www167.lunapic.com/editor/?action=transparent

person Kasper_Sky    schedule 15.08.2016
comment
Это должно быть сделано автоматически на сервере с помощью php. Хотя за идею спасибо! - person Andrew Fox; 16.08.2016
comment
Хотя я также пытаюсь понять, как это сделать на стороне сервера, пока это удобно, спасибо! - person necrodeus; 22.01.2017

хорошо, потому что я использовал intevention 1.x и не мог найти решение для моего масштабированного jpg, я решил опубликовать его, теперь я наконец нашел решение для черного фона.

я нашел этот код:

$img->fill('#ffffff', 0, 0); // заливка изображения цветом

Для меня это сделало прозрачное окружение после уменьшения масштаба белым, а не черным.

Я заметил, что это не работает на 100% (иногда слишком много белого), но в большинстве случаев работает. так что, возможно, кому-то еще нужно это решение.

person fr3ggel    schedule 14.01.2020