UPDATE: Доступна обновленная версия, работающая в KDE4.
В связи с обсуждением на лоре способа массового пережатия картинок, хочу предложить свое решение: фронтэнд к ImageMagik'у, написанный на bash с использованием kdialog (KDE)
Версия для KDE3:
#!/bin/bash
#
# Author:
http://yozhek10nozhek.livejournal.com/# You must keep the link to my LJ when copying this script.
#
[ -z "$PICDIR" ] || unset "$PICDIR"
[ -z "$SMALLPICDIR" ] || unset "$SMALLPICDIR"
[ -z "$EXT" ] || unset "$EXT"
[ -z "$DIFFRES" ] || unset "$DIFFRES"
[ -z "$DESTRES" ] || unset "$DESTRES"
[ -z "$SRCRES" ] || unset "$SRCRES"
EXT="jpg"
PICDIR=`kdialog --title "Выбери папку с картинками" --getexistingdirectory .`
SMALLPICDIR=`kdialog --title "Название папки" --inputbox "Введи название папки, в которую мы будем
складывать уменьшенные картинки.
small - вполне неплохой вариант" "$PICDIR/small"`
cd "$PICDIR"
TOTAL=`ls -1 *.$EXT | wc -l`
# Такая папка уже есть
if [ -d "$SMALLPICDIR" ]
then
if [ -w "$SMALLPICDIR" ]
then
kdialog --title "Вопрос возник" --yesno "Папка $SMALLPICDIR уже существует и доступна для записи. Складывать картинки в нее?"
if [ $? == 0 ] ; then
set > /dev/null # nop
else
kdialog --error "ОК. Тогда я завершаюсь"
exit 1
fi
else
kdialog --error "Папка $SMALLPICDIR существует, но недоступна для записи. Я завершаюсь."
exit 1
fi
fi
mkdir -p "$SMALLPICDIR"
kdialog --title "Текст ниже ;-)" --msgbox "Сейчас мы проверим разрешение всех картинок в папке $PICDIR"
# Проверяем разрешение картинок
dcopCheckRes=`kdialog --progressbar "Нажми Cancel, чтобы прервать" $TOTAL`
dcop $dcopCheckRes showCancelButton true
inc=0
resolutions=".resolutions"
[ -f "$resolutions" ] && rm -f "$resolutions"
touch "$resolutions"
for pic in *.$EXT
do
[ "true" == `dcop $dcopCheckRes wasCancelled` ] && break
res=`identify "$pic" | awk '{print $3}'`
echo "$pic" $res >> "$resolutions"
inc=$((`dcop $dcopCheckRes progress` + 1))
dcop $dcopCheckRes setProgress $inc
done
dcop $dcopCheckRes close
DIFFRES=`cat "$resolutions" | awk '{print $2}' | sort | uniq | wc -l`
if [ $DIFFRES -ge 2 ]
then
kdialog --title "Простите" --sorry "В папке некоторые картинки перевернутые, проверь и поверни их.\nВ следующем окошке будут показаны названия файлов и их разрешения."
kdialog --textbox "$resolutions" 440 500
exit 1
fi
# Пережимаем картинки
DESTRES=`kdialog --title "Введи разрешение для картинок" --inputbox "Укажи разрешение (например, 1024x768):" "1024x768"`
SRCRES=`head -1 "$resolutions" | awk '{print $2}'`
dcopResize=`kdialog --progressbar "Пережимаем картинки (складываем их в папку $SMALLPICDIR)" $TOTAL`
dcop $dcopResize showCancelButton true
inc=0
for pic in *.$EXT
do
[ "true" == `dcop $dcopResize wasCancelled` ] && break
convert -size "$SRCRES" "$pic" -resize "$DESTRES" +profile "*" "$SMALLPICDIR"/"$pic"
inc=$((`dcop $dcopResize progress` + 1))
dcop $dcopResize setProgress $inc
done
dcop $dcopResize close
kdialog --title "OK" --msgbox "Готово!"
cd "$OLDPWD"
exit 0
UPDATE: Обновленная версия для KDE4:
#!/bin/bash
[ -z "$PICDIR" ] || unset "$PICDIR"
[ -z "$SMALLPICDIR" ] || unset "$SMALLPICDIR"
[ -z "$EXT" ] || unset "$EXT"
[ -z "$DIFFRES" ] || unset "$DIFFRES"
[ -z "$DESTRES" ] || unset "$DESTRES"
[ -z "$SRCRES" ] || unset "$SRCRES"
EXT="jpg" # ИЗМЕНИТЕ НА СВОЁ!
PICDIR=`kdialog --title "Выбери папку с картинками" --getexistingdirectory .`
[ $? == 1 ] && exit 0
SMALLPICDIR=`kdialog --title "Название папки" --inputbox "Введи название папки, в которую мы будем
складывать уменьшенные картинки.
small - вполне неплохой вариант" "$PICDIR/small"`
[ $? == 1 ] && exit 0
cd "$PICDIR"
TOTAL=`ls -1 *.$EXT | wc -l`
# Такая папка уже есть
if [ -d "$SMALLPICDIR" ]
then
if [ -w "$SMALLPICDIR" ]
then
kdialog --title "Вопрос возник" --yesno "Папка $SMALLPICDIR уже существует и доступна для записи. Складывать картинки в нее?"
if [ $? == 0 ] ; then
set > /dev/null # nop
else
kdialog --error "ОК. Тогда я завершаюсь"
exit 1
fi
else
kdialog --error "Папка $SMALLPICDIR существует, но недоступна для записи. Я завершаюсь."
exit 1
fi
fi
mkdir -p "$SMALLPICDIR"
kdialog --title "Текст ниже ;-)" --msgbox "Сейчас мы проверим разрешение всех картинок в папке $PICDIR"
# Проверяем разрешение картинок
dbusCheckRes=$(kdialog --title "Проверяем разрешение картинок" --progressbar "Нажми Cancel, чтобы прервать" $TOTAL)
qdbus $dbusCheckRes org.kde.kdialog.ProgressDialog.showCancelButton true
inc=0
resolutions=".resolutions"
[ -f "$resolutions" ] && rm -f "$resolutions"
touch "$resolutions"
for pic in *.$EXT
do
[ "true" == `qdbus $dbusCheckRes org.kde.kdialog.ProgressDialog.wasCancelled` ] && break
res=`identify "$pic" | awk '{print $3}'`
echo "$pic" $res >> "$resolutions"
inc=$((`qdbus $dbusCheckRes org.freedesktop.DBus.Properties.Get org.kde.kdialog.ProgressDialog value` + 1))
qdbus $dbusCheckRes org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog value $inc
done
qdbus $dbusCheckRes org.kde.kdialog.ProgressDialog.close
DIFFRES=`cat "$resolutions" | awk '{print $2}' | sort | uniq | wc -l`
if [ $DIFFRES -ge 2 ]
then
kdialog --title "Простите" --sorry "В папке некоторые картинки перевернутые, проверь и поверни их.\nВ следующем окошке будут показаны названия файлов и их разрешения."
kdialog --textbox "$resolutions" 440 500
exit 1
fi
# Пережимаем картинки
DESTRES=`kdialog --title "Введи разрешение для картинок" --inputbox "Укажи разрешение (например, 1024x768):" "1024x768"`
[ $? == 1 ] && exit 0
SRCRES=`head -1 "$resolutions" | awk '{print $2}'`
dbusResize=$(kdialog --title "Обработка" --progressbar "Пережимаем картинки (складываем их в папку $SMALLPICDIR)" $TOTAL)
qdbus $dbusResize org.kde.kdialog.ProgressDialog.showCancelButton true
inc=0
for pic in *.$EXT
do
[ "true" == `qdbus $dbusResize org.kde.kdialog.ProgressDialog.wasCancelled` ] && break
convert -size "$SRCRES" "$pic" -resize "$DESTRES" +profile "*" "$SMALLPICDIR"/"$pic"
inc=$((`qdbus $dbusResize org.freedesktop.DBus.Properties.Get org.kde.kdialog.ProgressDialog value` + 1))
qdbus $dbusResize org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog value $inc
done
qdbus $dbusResize org.kde.kdialog.ProgressDialog.close
kdialog --title "OK" --msgbox "Готово!"
cd "$OLDPWD"
exit 0
Очень удобно для пережатия кучи jpg'ов с фотоаппарата (для выкладывания в интернет или пересылки по почте, когда терять оригиналы с большим разрешением не хочется).
Учтите, однако, что все исходные картинки должны быть одного разрешения (1024x768 и 768x1024 - это не одно и то же).
Проще раскидать вертикально снятые в одну папку, а горизонтально снятые - в другую и пережимать обе папки по отдельности - все ж быстрее в разы, чем каждую картинку отдельно.