Як замінити однорідний фон прозорим за допомогою imagemagick

Буває, що на сайт завантажуються картинки з однорідним фоном і виникає потреба в автоматичній заміні його (фону) на прозорий.

Часто така фіча потрібна для фотографій товарів в інтернет-магазині, картинок, які накладаються на корпоративний фон і інших фоток, які не псують дизайн сайту. Вирізати кожну фотку вручну фотошопом досить сумно, але є php-методи, за допомогою яких це можна «поставити на потік».


Як це працює


Функція попиксельно шукає де закінчується однорідний колір. Після того, як всі координати обчислені - функція просто вирізає все, що знаходиться зовні.

Заміна білого фону прозорим можлива тільки якщо вихідна картинка збережена в форматі PNG або GIF. Підійдуть і нові формати WebP і BPG з підтримкою прозорості.

Як замінити однорідний фон прозорим за допомогою imagemagick

Перед видаленням фону завжди краще ресайз велику картинку. Якщо зробити це після - кордони можуть спотворитися.

Заміна фону, приклад на bash


Для видалення фону в ImageMagick є оператор -trim. Він обрізає картинку по заданому кольору:


Перед обрізанням стандартний JPEG конвертується в PNG. У lossy JPEG'е фон не буде однорідним. Сусідні пікселі зазвичай незначно відрізняються за кольором. Наприклад: білий, світло-сірий, світло-блакитний. Аргумент fuzz встановлюється в значення> 0, щоб дозволити функції вважати сусідні кольори однаковими.

Заміна фону, приклад на PHP


Приклад обрізки білого фону на зображенні (вхідний файл: image.jpg, вихідний - trimmed.png):


Оператор borderImage малює навколо картинки рамку 1х1 в колір фону, після чого оператор trimImage обрізає її разом з рамкою.

Як замінити однорідний фон прозорим за допомогою imagemagick

Увага! Оператор trimImage працює, якщо Imagick скомпільовано з ImageMagick версії не нижче 6.2.9.

Як зробити фон однорідним


Схожим способом можна замінити неоднорідний фон на однорідний при конвертації з JPEG в PNG:


У цьому прикладі - кожен піксель фону заллється одним кольором - пікселя з координатами (0; 0).

Як замінити однорідний фон прозорим за допомогою imagemagick

Багато прикладів роботи коду


Як працює обрізка фону за допомогою бібліотеки Imagick можна перевірити тут. Онлайн-інструмент замінює будь-який однорідний фон на прозорий, як з цим яблучком. Ось приклад з чорним фоном і складними формами для трима (волосся). Звичайно, може залишатися невелика біла рамка. Але виглядає досить пристойно. Навіть котячі вуса вирізає на ура.


  1. Для видалення однотонного фону з картинки можна використовувати оператор
    -trim або команду trimImage.
  2. Перевірити як працює видалення фону за допомогою Imagick можна тут.
  3. Вихідну картинку потрібно зберегти в будь-якому з форматів з підтримкою прозорості: PNG, GIF, WebP, BPG.