20.03.2015

На постоянной основе сталкиваемся с ситуацией изменения размера изображений в проектах. Потому сейчас рассмотрим мою любимую функцию 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 параметров.

Прямая ссылка на документацию В документации тоже есть ряд недочетов, с которыми вы познакомитесь поближе, когда сами начнете использовать данную функцию.


Возврат к списку

Спасибо. Ваше сообщение было успешно отправлено.
Mы свяжемся с Вами в ближайшее время.