Home > Linux, openSuse, программирование > Пакетное изменение размеров картинок

Пакетное изменение размеров картинок

script

Для следующей (будущей) заметки мне потребовалось с больших картинок сделать превьюшки. Такое часто требуется (и не только для блогинга) да и свободная минутка выпала. Писать почему-то захотелось на shell, тем более я его незнаю, но с каждым днём количество скриптов растёт.

Сначала я пошёл по простому пути: методом написания скрипта на один раз, тоесть при следующем исползовании пришлось бы править скрипт и т.д. Идея проста и подсказана была мне (даже не подсказана, а тупо дан кусок кода) mike shigorin. Вопрос был сформирован чуть по-другому. Приведу кусок переписки так там затрагивается вопрос массовой раздачи прав на файлы.

>Если уж заговорили о работе chmod, то хотел бы у тебя спросить.
>Вот иногда мне нужно устанавливать права на все файлы + файлы подкаталогах.
>И вот чтобы установаить например права 755 я пишу

>chmod 755 /path/ -R
>Но, как известно, это сделает невозможным заход в каталоги. как
>сделать так , чтобы акталогам ещё и +x давало?
Это тебе как раз сделает +x, а если имел в виду 644 — то

find /path -type f | while read i; do chmod 644 “$i”; done

(не совсем пуленепробиваемая форма — с именами, которые содержат
перевод строки, не справится, но для пробелов достаточно; более
надёжный вариант для скриптов должен использовать find -print0)

—- WBR, Michael Shigorin <**********>
—— Linux.Kiev http://www.linux.kiev.ua/

Надеюсь суть письма понятна: хотел я красиво права на файлы раздавать. На базе этого решил и писать строчку скрипт :)

В общем задача: В каталоге лежат множество картинок большого размера. Следует в каталог small/ загнать картинки с таким же именем но размером по ширине 400 пикселей.

Сначала был интерпретирована строчка Шигорина под мои нужды. Следует сказать, что изменяет размер картинки команда convert с пакета,кажется, ImageMagic. Формат таков:

Usage: convert [options ...] file

А если в options поставить -resize geomety, то получим уже урезаную картинку. Не сильно замарачиваясь написал что-то похожее до:

find /path -type f | while read i; do convert "$i" -resize 400 "small/$i"; done

Что странно – заработало! Конечно, куча варнингов и багов, но – сработало! Но как это всё грусно и не переносимо. Решил тратить время на нормальный скрипт.

Использовать тоесть вызывать мы скрипт будем с одним обязательным параметром (путь к каталогу, где у нас скопом лежат картинки) и вторы, не обезательным, шириной маленькой картинки.

wert2all@webdev:~/scripts> ./resize_pic.sh ~/tmp/blog 400

Второй параметр, как я уже сказал, не обезательный и он по-умолчанию равняется 400. Это я так хочу!!! ;)

В самом скрипте следует проверить как запусчен скрипт. Ну обезательный параметр, ну и существование такой директори.

if ! [ -z $1 ]; then if [ -d $1 ]; then

# всё нормально, работаем

else

echo 'Path not exist'

fi

else

echo 'Enter path'

fi

Первый условный оператор проверяет на наличие в коммандной строке обязательного первого параметра, а второй if – на существование такого каталога.

Проверяем второй параметр и если его нет, то сделаем по-умолчанию:

if  [ -z $2 ]; then   resize=400

else

resize=$2

fi

Теперь создаём папку small/ если же её нет:

if ! [ -d $1"/small/" ]; then   mkdir $1"/small/"

fi

А теперь перебираем все файлы с расширением .gif, .png и .jpg и конвертируем.

for i in `ls $1 | grep '[gif|png|jpg]'`   do

convert $1/$i -resize $resize $1/small/$i

echo "Done "$i"..."

done

Весь вкрипт маленький, но мне для пакетной обработки фоток понадобиться. Надеюсь и кому-то тоже (что врядли ;) )

#/usr/bin/sh

# resize pictures in directory

#

#

# usage: path_to_dir [resize geometry]

if ! [ -z $1 ]; then

if [ -d $1 ]; then

if  [ -z $2 ]; then

resize=400

else

resize=$2

fi

if ! [ -d $1"/small/" ]; then

mkdir $1"/small/"

fi

for i in `ls $1 | grep '[gif|png|jpg]'`

do

convert $1/$i -resize $resize $1/small/$i

echo "Done "$i"..."

done

else

echo 'Path not exist'

fi

else

echo 'Enter path'

fi

Так как в текстовом виде скрипт ужасен – выложено.

  1. финтифлюпс
    April 25th, 2007 at 12:41 | #1

    ну, в общем, ниасилил текст полностью, но понял, что ты тусуешь с крутыми папками из липукс.киев.юэй.
    Круто!

  2. April 25th, 2007 at 14:13 | #2

    А я в камментах буду переназывать тебя в “Флеймер”, можна?

  3. Флеймер
    April 25th, 2007 at 15:25 | #3

    без питань

  1. No trackbacks yet.