Во многих веб-приложениях возникает необходимость в автоматической обрезке — будь то обрезка аватара из загруженной фотографии, предварительный просмотр больших изображений или создание миниатюр в больших галереях.
Но машины все-таки не люди, и нужная территория не всегда будет вырезана.
Старые методы вроде вырезания миниатюры 100х100 из левого верхнего угла или из центра отходят на второй план, и на арену выходит умное кадрирование.
Традиционный умный урожай
Большинство библиотек используют интеллектуальную обрезку, чтобы избежать искажений и растягивания фотографий.Дело в том, что код сначала изменит размер изображения так, чтобы один из параметров — длина или ширина — совпадал с указанным.
Затем он проверяет, соответствует ли второй параметр заданному.
В противном случае лишние области обрезаются, начиная с центра.
Создание миниатюры, скажем 400x400, будет выглядеть так:
Загвоздка в том, что не всегда (вернее, почти никогда) самое главное находится в самом центре.
Чаще всего — какая-то часть основного, но предметы чаще всего так или иначе смещены.
Умная обрезка на основе энтропии
Общая идея состоит в том, чтобы найти фрагмент изображения, содержащий больше всего информации, и сохранить его в обрезанном виде.
Как это работает
Сначала размер изображения изменяется.
Затем запускается фильтр для определения границ.
Картинка становится черно-белой и на ней остаются только очертания предметов.
Насыщенность максимально снижается и картинка становится несколько размытой.
Определяется фрагмент с наибольшей энтропией, то есть с наибольшим количеством контуров.
Возвращаются координаты этого фрагмента, то есть той части картинки, которую нельзя обрезать ни при каких обстоятельствах.
Самый сложный этап — поиск фрагмента с наибольшей энтропией.
Поиск осуществляется фрагментами — картинка «разрезается» на 25 полосок, для каждой из них вычисляется и сравнивается энтропия.
Затем определяется группа с максимальной энтропией.
Приложение
Удобно использовать Вот этот библиотека.Требования: PHP 5.3 с расширением Imagick. Применяется в три этапа.
Инициализация:
Изменение размера и обрезка:$center = new CropEntropy($imagePath);
$croppedImage = $center->resizeAndCrop($width, $height);
Сохраняем новое изображение:
$croppedImage->writeimage($newImagePath);
Вы можете попробовать обрезать на основе энтропии здесь , указав необходимый размер миниатюры.
Иногда Алгоритм точно определяет наиболее важную область.
Но иногда неправильный , особенно при нестандартных - неквадратных параметрах кропа (300х100).
Но это очень хороший результат с теми же параметрами, но другое фото.
Алгоритм не гарантирует идеальный результат, но тем не менее это один из лучших методов автообрезки.
Абстрактный
- Один из лучших способов автоматизации обрезки — обрезка на основе энтропии.
- Алгоритм определяет фрагмент с наибольшим количеством информации и сохраняет его в обрезанном виде.
- Достоинства и недостатки метода можно проверить.
этот инструмент.
-
Вы Приносите Плохие Новости Руководству?
19 Oct, 24 -
Тестирование
19 Oct, 24