Xpoint
   [напомнить пароль]

Быстрые превьюшки.

Для изменения (нам нужно уменьшение) размеров картинок в PHP есть 2 функции: imageCopyResized и imageCopyResampled. Первая (и более древняя) уже стала "притчей во языцех" из-за низкого качества получающихся картинок, т. к. она не делает сглаживания, в результате чего картинка "рябит пикселями" (кто играл в первые 3D-игрушки, тот поймет). Функция же imageCopyResampled делает бикубическое сглаживание, но она (по понятным причинам) гораздо более ресурсоемка, чем своя старшая сестра.

С ресурсоемкостью можно бороться двумя способами — либо создавать и хранить файлы с уменьшенной копией изображения (и при последующих запросах просто отдавать готовый результат), либо, если хранение файлов нецелесообразно (к примеру, в администраторской панели, где эти картинки кроме админа никто не смотрит) пытаться разумно жертвовать качеством.

Хочу предложить решение в виде каскада из этих двух функций. Поясню на примере: Пусть у нас есть фотография 2000x1500 пикселей. Нам из нее надо получить превьюшку 100x75. Тогда с помощью быстрой imageCopyResized уменьшаем ее, к примеру, до 400x300, а потом уже через медленную imageCopyResampled доводим размеры до нужных.

Сначала мы получили чуть пикселизованную картинку 400x300 (где пикселизация все же не столь заметна из-за достаточных размеров изображения), а потом эту, уже небольшую промежуточную картинку сгладили при уменьшении до окончательных размеров.

Эксперименты показывают, что быстродействие скрипта возрастает "драматически", а разницу между картинками, полученными чисто функцией imageCopyResampled и каскадом, можно заметить только при особо внимательном сравнивании и далеко не на каждой картинке.

Powered by POEM™ Engine Copyright © 2002-2005