PHP - ресайз, обработка изображений. Методы, библиотеки
Задача ресайза (resize - изменение размеров) изображений возникает практически в любом более-менее серьёзном web-приложении. Аватарки, предпросмотр фотографий, миниатюры (thumbnails), нанесение водяных знаков для защиты картинок от копирования- все они предполагают предварительную обработку изображений..
В PHP для обработки изображений можно использовать встроенные функции библиотеки GD (в последнее время не встречал ни одного хостинга, где бы её не было) или класс Imagick для работы с ImageMagick. Для большинства рутинных задач, касающихся обработки изображений на PHP их вполне достаточно - примеры можно посмотреть прямо в мануале. (На самом деле, библиотек для работы с изображениями больше /Gmagick, Cairo.. А есть ещё библиотеки не упомянутые в PHP-мануале/, но, на мой взгляд, эти наиболее популярны).
Однако, встроенные функции обработки изображений довольно громоздки и характеризуются отсутствием универсальности (т.е., к примеру, в GD для открытия изображения нужно сначала определить его формат.. и, в зависимости от формата, использовать соответствующую функцию). Поэтому довольно широкое распространение получили классы-надстройки для обработки изображений. В зависимости от задач, стоящих перед разработчиком, иногда имеет смысл использовать самописную функцию на 3-4 строчки.. Но о готовых решениях следует знать хотя бы то, что они существуют и позволяют делать.
PHP-Классы и библиотеки для обработки изображений
На самом деле PHP-классов для ресайза и обработки изображений существует великое множество - ведь довольно часто разработчик вместо того, чтобы использовать уже существующее решение, пишет свой (не всегда плохой) класс/набор функций.
Более-менее серьезное решение для обработки картинок на PHP на мой взгляд должно включать:
- ресайз (уменьшение изображения) как в файл, так и на стандартный вывод (в браузер т.е.), как с сохранением пропорций, так и с искажением, как в процентах, так и в точках
- crop (обрезка до указанных размеров)
- resize+crop (при необходимости уместить в прямоугольник нужного размера с обрезкой “лишнего”)
- наложение водяных знаков (watermark) как текстом, так и изображением в различной позиции (верх/центр/низ,лево/центр/право, попиксельное задание координат) и различной прозрачностью (alpha)
- сохранять изображения в распространенные форматы (jpg,gif,bmg,png8,png24) с возможностью задания настроек-опций (качество в JPG, прозрачность в GIF|PNG и т.д.)
- использование фильтров (размытие, яркость/контраст,негатив,Sepia) будет плюсом
PHPThumb
PHPThumb одно из наиболее давно зарекомендовавших себя решений - работает с PHP 4.0.6 ( php 5 позволит использовать больше фильтров). Позволяет всё из вышеперечисленного и немного больше. Может работать как с GD, так и с ImageMagick.
http://phpthumb.sourceforge.net/
Последний релиз на сегодняшний день - 2011
WideImage
Как и старший “брат” может все из вышеперечисленного. Наглядно возможности представлены на демо-страничке. Проект поддерживает php5, имеет открытый код и хостится на sourceforge.net.
http://wideimage.sourceforge.net/examples/
Imagine
требует для работы PHP 5.3 и выше, также работает с GD, Imagick, GMagick
ttps://github.com/avalanche123/Imagine
PHPThumbnailer
Проект некоторое время довольно активно развивался, однако со временем эта активность практически “сошла на нет”. И, несмотря на то, что хостится на github-е, последние коммиты были довольно давно.
Asido
Последние новости проекта датируются 2007 годом..
http://asido.info/
Рекомендации по ресайзу, хаки, лучшие практики (с)
Ресайз изображений “на лету” довольно удобен в плане реализации, однако использует необоснованно много ресурсов сервера. Естественно, более правильный вариант - ресайзить изображения заранее и сохранять (кэшировать) их на диск. Распространённый метод - использование mod_rewrite в .htaccess для перенаправления запросов к несуществующим файлам на php-файл, который будет генерировать нужную превьюшку и сохранять её на диск.
Кэширование отресайзенных изображений подробно рассмотрено в статье http://mrphp.com.au/code/image-cache-using-phpthumb-and-modrewrite
Метки: php
Для ресайза на php использую следующий продукт:
http://true-coder.ru/php/toolkit-dlya-resajza-i-kropa-izobrazhenij-na-php.html
Он очень удобен и имеет в запасе большой функционал.