parser

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

 

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

Изменение размеров графических изображений внешними программами (продолжение)

Spearance 30.05.2008 07:52

Как и обещал в чате продолжаю знакомить вас с новыми фишками в области обработки изображений для веб.

Что мы имеем на сегодня?

Имеем возможность работы с ImageMagick, и NСonvert (в примерах есть две реализации в виде класса, работающего с бинарными утилитами, а так же класса работающего в связке с Perl). Причём многие уже оценили и полюбили модные NСonvert-ые фишки обработки Jpeg файлов без перекомпрессии.

Однако, в первом из классов была обозначена проблема что ImageMagick не позволяет изменять Jpeg без перекомпрессии. Я решил заняться этим вопросом и понять почему так. На форуме ImageMagick я нашел забавную фразу "зачем нам что-то реализовывать внутри своей библиотеки когда уже есть прекрасное готовое решение".

Итак знакомьтесь - jpegtran

Утилитка которая есть на всех Unix-подобных системах входит в библиотеку jpeg. Есть и реализация под Windows.

Что она позволяет делать? Она позволяет производить различные манипуляции (обрезание meta данных, поворот, отражение, кроп, изменение размера и т.д. ) с jpeg без перекомпрессии.

Полный перечень функций:
usage: jpegtran [switches] [inputfile]

Switches (names may be abbreviated):
-copy none Copy no extra markers from source file
-copy comments Copy only comment markers (default)
-copy all Copy all extra markers
-optimize Optimize Huffman table (smaller file, but slow compression)
-progressive Create progressive JPEG file

Switches for modifying the image:
-grayscale Reduce to grayscale (omit color data)
-flip [horizontal|vertical] Mirror image (left-right or top-bottom)
-rotate [90|180|270] Rotate image (degrees clockwise)
-transpose Transpose image
-transverse Transverse transpose image
-trim Drop non-transformable edge blocks

Switches for advanced users:
-restart N Set restart interval in rows, or in blocks with B
-maxmemory N Maximum memory to use (in kbytes)
-outfile name Specify name for output file
-verbose or -debug Emit debug output

Switches for wizards:
-scans file Create multi-scan JPEG per script file
Про функции кроп и ресайз читайте здесь.

Весит утилитка в сборке под RedHut каких-то 18 Кб.

Пример вызова:
$f[^file::exec[/../bin/jpegtran;;-copy;none;-rotate;90;-outfile;$env:DOCUMENT_ROOT/результат.jpg;$env:DOCUMENT_ROOT/исходник.jpg]]
В данном случае обрежутся все метаданные и картинка повернётся на 90 градусов по часовой стрелке.

Измерить адекватно скорость работы не удалось, но по собственным ощущениям очень быстро. :)

P.S. ну вот собственно и все. С возвращением меня.