На постоянной основе сталкиваемся с ситуацией изменения размера изображений в проектах. Потому сейчас рассмотрим мою любимую функцию ResizeImageGet.
Данная функция уменьшает изображение по указанным пропорциям и возвращает набор данных о новом (уменьшенном) изображении.
Рассмотрим ее более детально:
$thumb=CFile::ResizeImageGet($PID, array('width'=>160,'height'=>160),BX_RESIZE_IMAGE_EXACT, true, array());
На самом деле у функции 7 параметров, но используют в основном такую связку.
В первый параметр подается идентификатор изображения или массив описания файла, с которым мы работаем.
Второй параметр отвечает за максимальный размер изображения. При этом именно максимальный, т.к. в зависимости от третьего параметра, результат может меняться.
Параметр номер 3 отвечает за то, каким образом мы будем обрабатывать изображение. Варианта три:
- - BX_RESIZE_IMAGE_EXACT - масштабируем изображение, обрезая лишнее, если пропорция не совпадает. При этом приоритетом будет являться центральная часть изображения, т.е. если вы ужимаете до 160 на 160, а изображение 320 на 480, то сначала изображение уменьшится до 160 на 240, а лишь затем по краям отрежется лишнее ( в нашем случае по 40 с каждой лишней стороны);
- - BX_RESIZE_IMAGE_PROPORTIONAL - масштабируем с сохранением пропорций;
- - BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабируем с сохранением пропорций (улучшенная обработка вертикальных картинок).
Параметр 4 отвечает за то, чтобы в массиве, который будет возвращен функцией, будет указаны параметры нового изображения.
И пятый параметр отвечает за фильтрацию изображения, т.е. с помощью этого фильтра можем увеличить резкость или нанести водяной знак.
После отработки данной функции на сервер создается реальное изображение в папке /upload/resize_cache/....
При работе с данной функцией нужно помнить ряд особенностей, а именно:
1. Прежде чем создавать уменьшенную копию файла, функция проверяет есть ли такая копия уже на сервер, если есть, то просто отдает данные по этой копии, нет - создает. Ошибка обычно встречается очень простая и легко решаемая: Если выделенное вам место на жестком диске заканчивается, то функция создает файл копии, однако, создает его пустым. Даже если вы освободите место, функция будет считать, что копия есть и ей достаточно отдать данные о файле. Решение самое простое: нужно лишь удалить все копии. Почему все?! Ответ простой: вылавливать все битые копии будет очень долго.
2. Часто встречаю вот такую комбинацию:
$thumb=CFile::ResizeImageGet($PID, array('width'=>160,'height'=>160),BX_RESIZE_IMAGE_EXACT);
Работает комбинация без вопросов, но проблема с ней так же встречается. Т.к. не задается пятый параметр функции, то по умолчанию устанавливается наведение резкости, при которой файлы с прозрачным фоном чернеют. Решение: писать 5 параметров.
2013-2024 © Студия Action-it.ru
Копирование материалов сайта без разрешения запрещено