parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

OFF: Изменение размера изображения внешними программами

Spearance 06.08.2005 08:38

Наверняка многие хотябы краем глаза видели мой пример по изменению размера изображений. В нём я предлагаю использовать perl скрипт и библиотеку ImageMagick.

Не так давно обратил внимание на утилиту nconvert, которая входит в комплект xnview - просмотрщика картинок.

Эта утилита позволяет производить различные преобразования файлов, начиная от формата и заканчивая различными художественными фишками.

Чем примечателен nconvert.

1. Не требует знания Perl.
2. Не требует установки ImageMagick.
3. Дистрибутив есть практически под все системы включая Mac.
4. При наличии установленой xnview можно настройки преобразований подбирать в визуальной среде.

Функционально.
1. Самый главный плюс, может делать поворот изображения, а так же различные зеркальные отражения без потери качества JPEG.
2. Может делать преобразования с любым из примерно 400 графических форматов.
3. Может работать с многостраничными (многослойными) форматами.
4. Поддерживает 8 алгоритмов изменения размера изображения.

Установка проста, кладём скрипт с библиотекой в папку bin или cgi-bin, назначаем nconvert права для запуска и всё.

Запустить скрипт из Parser можно так:
$f[^file::exec[/../bin/nconvert;;-help]]
<pre>$f.text</pre>
При таком запуске выведет список всех своих возможностей и атрибутов.

Сделать простой ресайз JPEG картинки по ширине до 200 пикселей с качеством сжатия 80% можно так:
$f[^file::exec[/../bin/nconvert;;-ratio;-q;80;-rtype;lanczos;-resize;200;${env:DOCUMENT_ROOT}/test.jpg]]
Теперь статистика:
Измерить разницу в количесве используемой памяти между nconvert и ImageMagick мне не удалось. По крайней мере те результаты которые я получал, на мой взгляд не соответствуют реальности.

Единственное что удалось померить точно - время обработки.
Файл 1Mb в цикле ресайзился до размера в 200 px 10 раз.
nconvert - 21 секунда.
ImageMagick - 12 секунд.

Учитывая что обычно обрабатываются файлы не больше 300 кб, то на обработку одного файла:
nconvert затратит - 0.6 секунды
ImageMagick затратит - 0.3 секунды

По идее, для работы в редакторе разница не существенная, хотя выбирать конечно же вам.

Ложка дёгтя.
К сожалению из-за ограничений ^file::exec в неё нельзя записать больше 12 атрибутов для nconvert, т.е. если вы к примеру замыслили сделать разворот, сменить формат, сделать изображение ч/б и скажем более контрастным - увы. Придётся всё делать пооперационно, сохраняя промежуточный результат в файл без компрессии.


P.S. нужно сделать в своем классе images.p возможность использования nconvert или imagemagick по выбору.