Буває, що на сайт завантажуються картинки з однорідним фоном і виникає потреба в автоматичній заміні його (фону) на прозорий.
Часто така фіча потрібна для фотографій товарів в інтернет-магазині, картинок, які накладаються на корпоративний фон і інших фоток, які не псують дизайн сайту. Вирізати кожну фотку вручну фотошопом досить сумно, але є php-методи, за допомогою яких це можна «поставити на потік».
Як це працює
Функція попиксельно шукає де закінчується однорідний колір. Після того, як всі координати обчислені - функція просто вирізає все, що знаходиться зовні.
Заміна білого фону прозорим можлива тільки якщо вихідна картинка збережена в форматі PNG або GIF. Підійдуть і нові формати WebP і BPG з підтримкою прозорості.
Перед видаленням фону завжди краще ресайз велику картинку. Якщо зробити це після - кордони можуть спотворитися.
Заміна фону, приклад на bash
Для видалення фону в ImageMagick є оператор -trim. Він обрізає картинку по заданому кольору:
Перед обрізанням стандартний JPEG конвертується в PNG. У lossy JPEG'е фон не буде однорідним. Сусідні пікселі зазвичай незначно відрізняються за кольором. Наприклад: білий, світло-сірий, світло-блакитний. Аргумент fuzz встановлюється в значення> 0, щоб дозволити функції вважати сусідні кольори однаковими.
Заміна фону, приклад на PHP
Приклад обрізки білого фону на зображенні (вхідний файл: image.jpg, вихідний - trimmed.png):
Оператор borderImage малює навколо картинки рамку 1х1 в колір фону, після чого оператор trimImage обрізає її разом з рамкою.
Увага! Оператор trimImage працює, якщо Imagick скомпільовано з ImageMagick версії не нижче 6.2.9.
Як зробити фон однорідним
Схожим способом можна замінити неоднорідний фон на однорідний при конвертації з JPEG в PNG:
У цьому прикладі - кожен піксель фону заллється одним кольором - пікселя з координатами (0; 0).
Багато прикладів роботи коду
Як працює обрізка фону за допомогою бібліотеки Imagick можна перевірити тут. Онлайн-інструмент замінює будь-який однорідний фон на прозорий, як з цим яблучком. Ось приклад з чорним фоном і складними формами для трима (волосся). Звичайно, може залишатися невелика біла рамка. Але виглядає досить пристойно. Навіть котячі вуса вирізає на ура.
- Для видалення однотонного фону з картинки можна використовувати оператор
-trim або команду trimImage. - Перевірити як працює видалення фону за допомогою Imagick можна тут.
- Вихідну картинку потрібно зберегти в будь-якому з форматів з підтримкою прозорості: PNG, GIF, WebP, BPG.