ПолезностиКонвертация картинок

Подкинули мне на днях халтурку. Надо сделать каталог программ на сайт. Работа несложная, но трудоемкая. Особенно в части оформления.

Каждому внесенному в каталог приложению должно соответствовать две одинаковые картинки в формате JPG – маленькая (большая сторона – 125) и большая (большая сторона – 640). Делать их надо из скриншота, загруженного с официального сайта.

Технология, стало быть, такая. Сперва скачал картинку в формате PNG, потом сделал из нее JPG, потом сделал маленькую копию, потом большую, потом удалил «исходник», чтобы места на диске не занимал. В-общем, рутинная работа для которой нужна программа convert из пакета ImageMagick.

В системе Mandriva пакет устанавливается командой

urpmi imagemagick


Теперь считаем. Если картинок много, то получается совсем невесело. Надо это дело как-то автоматизировать.
Предлагаю два способа.

Первый:

#!/bin/bash
for img in *.png; do
convert -quality 60 -resize 640x480 "$img" "$img.MAIN.jpg"
convert -quality 60 -resize 125x100 "$img" "$img.PRE.jpg"
rm "$img"
done


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

Второй:

#!/bin/bash
find -name "*.png" | xargs -I {} -t convert -quality 60 -resize 640x640 {} "{}.MAIN.jpg"
find -name "*.png" | xargs -I {} -t convert -quality 60 -resize 125x100 {} "{}.PRE.jpg"
find -name "*.png" | xargs -I {} -t rm {}


Этот метод уже универсальный.

PS. Часто начинающие пользователи испытывают страх перед скриптами, ошибочно полагая, что это обязательно должны быть какие-то многоэтажные конструкции. Это не всегда так — даже две-три команды, объединенные в одну, могут оказаться эффективны. Тем более, что их написание занимает буквально пару минут.

Комментарии (4)

исходя из ваших команд, картинка будет с сохранением оригинального соотношения сторон, в данном случае 640х640 и 125х100 — это лишь максимальные показатели ширины и высоты, ибо:
widthxheight Maximum values of height and width given, aspect ratio preserved.

чтобы этого избежать, нужно поставить экранированный символ "!" в конце размера, примерно так:
convert -resize 640x640\!
а еще я немного писал про ImageMagick года три назад, можно почитать тут:
tinman321.blogspot.com/2008/11/introduction-in-magic-of-images.html
или тут:
osa.samag.ru/info/OpenSource029.zip
А ещё в xargs можно добавить параметр -P# для многопоточной обработки на многоядерных системах.
Да, если картинок очень много. Если штук 50, то разница на глаз практически незаметна :).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.