ImageMagick Прозрачный PNG-фон

Я пытаюсь взять это изображение enter image description here, которое я преобразовал в файл .png, а затем хочу удалить белый фон, чтобы сделать его прозрачным.

Я попробовал запустить следующее, но не имел никакой удачи.

    $strInputFile = 'car.png';
    $execScript = '/usr/local/bin/convert '.$strInputFile.' ';
    $execScript .= "-transparent white car-new.png"; 
    $output = shell_exec($execScript);

Я что-то делаю неправильно? Новый файл создается, но все еще имеет белый фон.

Ответ 1

Аналогичная проблема с php imagick:

При преобразовании SVG в прозрачный PNG не забудьте поставить это перед $imagick- > readImageBlob():

$imagick->setBackgroundColor(new ImagickPixel('transparent'));

Ответ 2

Попробуйте использовать следующий код:

$strInputFile = 'car.png';
$target = 'car_transparent.png';
$im = new Imagick($strInputFile);
$im->paintTransparentImage($im->getImageBackgroundColor(), 0, 10000);
$im->setImageFormat('png');
$im->writeImage($target);
$im->destroy();

Ответ 3

Поскольку изображение является JPEG, которое подвержено потерям и небольшим неточностям цвета, белые в вашем изображении на самом деле не 100% чисто белые. ImageMagick имеет способ справиться с этим с помощью параметра -fuzz, который позволяет определить степень нечеткости или диапазон допустимых ошибок при указании цветов.

Правильное заклинание здесь:

convert car.jpg -fuzz 10% -transparent white car.png

Ответ 4

Вы имели в виду использовать -transparency, а не -transparent?

Ответ 5

Фон вашего изображения не white (я имею в виду 0xFFFFFF), это 0xFEFEFE. Попробуйте:

$execScript .= "-transparent #FEFEFE car-new.png"; 

Ответ 6

Если вы не создаете оболочку script, попробуйте это:

$ convert -transparency white car.png car-new.png

Это должно работать в общем терминале. Если это не так, дайте мне знать. Надеюсь, поможет!