эта страница доступна на следующих языках: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
автор Katja Socher Об авторе: Katja - немецкий редактор LinuxFocus. Ей нравятся пинвины, фильмы, фотография и море. Её домашнюю страничку Вы можете найти здесь. Содержание: |
Резюме:
В этой статье мы рассмотрим некоторые заклинания которые может делать волшебник ImageMagick, используя коллекцию из графических утилит в качестве ингридиентов и командного процессора в качестве волшебной палочки.
Когда-то давным-давно волшебники собирали нужные ингридиенты, смешивали их вместе в
большом котле, махали своей волшебной палочкой, бормотали заклинания... и неожиданно кто-нибудь
превращался в жабу. В наше время волшебники, также как и все остальные в нашем обществе,
сильно специализированны, и их книги заклинаний содержат только несколько полезных
заклинаний, предназначеных для очень специфических задач. Поэтому ImageMagick это не книга с заклинаниями для повседневного использования.
По многим пунктам он не может соперничать с The Gimp и многими другими графическими программами,
но у него есть специальные возможности, которые бывают весьма полезны.
Они позволяют
автоматизировать многие из его процессов, работая с ними из командной оболочки.
Но, перед тем как мы раскроем Вам некоторые из заклинаний, Вы должны первым делом
ознакомиться с ингридиентами:
или Что такое ImageMagick?
ImageMagick это набор графических утилит для работы с изображениями. Это такие утилиты как display, import, animate, montage, convert, mogrify, identify и combine.convert -geometry 60x80 image.gif out.gifмасштабирует изображение image.gif до ширины - 60 и высоты - 80 пикселей и записывает получившееся изображение в out.gif.
#!/bin/sh for f in $* ;do convert -geometry 80x80 $f t_$f echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>" done # end of script(Наберите эти строчки в любом текстовом редакторе (vi, emacs, nedit, kedit...) и сохраните их в файл mksmallimage в директорию с Вашими изображениями. Теперь перейдите в bash и наберите
chmod 755 /home/katja/mksmallimage(используйте имя Вашей директории вместо katja) После этого можно использовать скрипт. Наберите /home/katja/mksmallimage xxx.jpg *.gif Скрипт преобразует все gif-файлы и файл xxx.jpg)
display "vid:*.jpg"Эта команда сгенерирует картинку на которой будут изображены все jpg-изображения в текущей директории. Или:
display "vid:frog/*"сгенерирует картинку со всеми изображениями в директории frog.
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>Здесь, оригинальный файл - file.gif и его пиктограмма - t_file.gif.
for f in $* ;do convert -geometry 80x80 $f t_$f echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">" doneПриведенный скрипт переберёт все изображения указанные в командной строке, сгенерирует для них пиктограммы и выведет на экран html-код. Затем мы можем скопировать и вставить html-код в нашу web-страницу.
convert image.gif image.jpgConvert по расширению файла сам определяет его формат.
for f in $* ;do if echo "$f" | grep -i "jpg$" > /dev/null ; then gif=`echo "$f" | sed 's/jpg$/gif/i'` echo "преобразовывается $f в $gif ..." convert 80x80 $f $gif else echo echo "$f не jpg файл, пропущен" fi doneImage Magick также поддерживает большое количество других форматов.
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpgОпция "gravity SouthEast" помещает logo.gif в нижний правый угол. "compose Over" означает, что мы заменяем изображение логотипом в тех местах где они перекрываются.
identify image.jpg получим image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01Как наш волшебник может это использовать? Ну, например, для разработки web-страниц, которые отображают изображения пока страница всё еще грузится, Вы должны указать точные размеры всех изображений. Html-код должен выглядеть примерно так:
<img src="image.jpg" width="340" height="254" alt="[пример картинки]">Если наши изображения различных размеров и мы точно не знаем высоту и ширину каждого из них, мы можем взять в помощники утилиту identify. Давайте напишем скрипт, который прочитает то что выдаст "identify" и затем сам выведет html-строку для данного изображения. Размеры изображения это второй параметр в строке информации выданной программой identify. Для того чтобы получить этот параметр мы будем использовать команду awk:
identify image.jpg | awk '{print $2}' получим 340x254Теперь нам надо разделить эту строку на ширину и высоту. Это может быть сделано при помощи команды:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'которая выдаст ширину. Высота может быть получена так:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'Если Вы полностью не понимаете эти команды, не волнуйтесь, просто скопируйте их. В следующем номере LinuxFocus будет статья, в которой мы прольём свет на все прелести shell-программирования. Наш скрипт будет выглядеть так:
file=$1 geometry=`identify $file | awk '{print $2}'` # полученая строка может быть 563x144+0+0 или 75x98 # нам надо избавиться от плюса (+) и символа x: width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'` height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'` echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"Для того чтобы получить окончательный вариант скрипта, мы как всегда добавим текст справки и обработку ошибок. Вот окончательный вариант, названный imgsrcline :
Играясь с ImageMagick я нашла некоторые различия между документацией и реальным функционированием. Некоторые возможности не очень стабильно работают. Тем не менее, если Вы дочитали этот текст до конца, то Вы должны были понять что вещи описаные здесь довольно полезны. Я использовала ImageMagick-4.2.9 , ImageMagick-5.2.9 и ImageMagick-5.3.0 и скрипты приведённые выше работают во всех этих версиях.
Надеюсь, что Вы получили представление о том, что можно делать при помощи ImageMagick и
будете использовать эти скрипты, а возможно даже и начнёте создание своих собственных заклинаний.
Удачи!
|
Webpages maintained by the LinuxFocus Editor team
© Katja Socher, FDL LinuxFocus.org Click here to report a fault or send a comment to LinuxFocus |
Translation information:
|
2001-08-16, generated by lfparser version 2.17