Как конвертировать фото в Linux

Привет. Сегодня небольшой опус на тему конвертации фотографий в Linux. А именно массивов фотографий. Давайте рассмотрим простой пример, в вашем очередном путишествии вы нафоткали сотню другую фотографий. Если вы являетесь владельцем новой цифровой камеры, с матрицей в 7-12МгП то вполне вероятно, что кажадое отснятое вами фото будет “весить” порядка 3.4Мб, во всяком случае так у меня с моим Canon SX10 IS. Вы перебросите все фотки на ваш комп, скажем в папку /home/user/photo/date и понятное дело, что “сырые” фотографии займут солидное место на вашем жестком диске. Если же вы любитель фотографировать, то место у вас скоро закончиться, даже на объемном винтчестере. По этому самым разумным было бы пережать все фотографии, что-бы вес одной фотки не привышал 412Кб и при этом качество осталось приемлимым. Обрабатывать каждое фото в ручную будет очень кропотливым делом, по этому ниже я предложу вам пару методов, как сделать это быстро и без особых услилий.

Метод первый, консольный

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

Первое, что вам необходимо, это установить программу Imagemagick:

sudo aptitude install imagemagick
sudo aptitude install imagemagick

Это всё. Теперь когда программа у вас в системе. Вы можете пользоваться утилитой convert. Что-бы пережать одну фотографию, выполните в консоли следующую команду:

convert -resize 1024 -quality 90 input.jpg output.jpg
convert -resize 1024 -quality 90 input.jpg output.jpg

где:
-resize – разрешение которое вы хотите задать исходящей фотографии
-quality – качество

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

ls *.JPG | cut -d . -f 1 | xargs -L1 -i convert -resize 1024 {}.JPG {}.jpg
ls *.JPG | cut -d . -f 1 | xargs -L1 -i convert -resize 1024 {}.JPG {}.jpg

В итоге вы получите изображение с разрешением 1024x768Mp, стоит упомянуть что convert умная утилита и учитывает соотношение сторон не ломая картинку, вес готового изображения у меня получился 254,6Kb. Как вы уже догадались, нет необходимости указывать 1024×768, convert сам в курсе разрешений, мало того, если даже вы укажете какое-то экзотическое разрешение, convert сам высчитает соотношение сторон и даст вам нормалное фото на выходе. Как по мне, это прекрасно!

Теперь, не выполнять же вам эту команду для каждого отдельного файла! По этому если в директории /home/user/photo/date у вас около трех сонет фоток, то разумным будет, завернуть вышеуказанную команду в скрипт, и выполнить скрипт. Все просто:

Создайте файл convert.sh:

mkdir ~
touch convert.sh
mkdir ~
touch convert.sh

И впишите туда вот этот скрипт:

#!/bin/bash
echo " "
echo  "--===www.linuxspace.org==--"
echo " "
 
for i in *.JPG
 do
  echo "Working on $i ..."
  convert -resize 1024 -quality 89 $i $i 2> /dev/null
 done
echo " "
echo "... Done!"
echo " "
exit 0
#!/bin/bash
echo " "
echo  "--===www.linuxspace.org==--"
echo " "
 
for i in *.JPG
 do
  echo "Working on $i ..."
  convert -resize 1024 -quality 89 $i $i 2> /dev/null
 done
echo " "
echo "... Done!"
echo " "
exit 0

Теперь сделайте его исполняемым:

chmod +x convrt.sh
chmod +x convrt.sh

скопируйте его в директорию с вашими фото, для примера /home/user/photo/date

cp convert.sh /home/user/photo/date
cp convert.sh /home/user/photo/date

Запустите скрипт и идите пить кофе!

sh convert.sh 
sh convert.sh 

Скрипт всё сделает за вас. Как видите всё очень просто и легко, а этот маленький скриптик поможет вам сэкономить тучу времени. Помните, что в скрипте можно менять разрешение файла, например *.JPG, *.jpg, *png и так далее.

По окончании работы, скрипт напишет вам в консоли Done! Но если вам этого мало, и вы хотите большего, пожалуйста, можно сделать alias в .bashrc и получить уведомление об окончании работы с помощью NotifyOSD.

Откройте .bashrc:

gedit ~/.bashrc
gedit ~/.bashrc

И впишите туда:

alias alert='notify-send -i /usr/share/icons/gnome/32x32/apps/gnome-terminal.png "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'
alias alert='notify-send -i /usr/share/icons/gnome/32x32/apps/gnome-terminal.png "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'

Теперь когда запускаете скрипт, делайте это так:

sh script.sh; alert
sh script.sh; alert

По окончании работы скрипта, в правом верхнем углу у вас вылетит красивое сообщение, что работа сделана. За столь полезное дополнение спасибо Dustin Kirkland.

К слову, для любителей рассортировывать свои фотографии по дате, типа \день\месяц\год есть команда для создания такой папки:

mkdir `date +%m_%d_%Y`
mkdir `date +%m_%d_%Y`

Вы получите папку вида:

ls -la
drwxr-xr-x  3 booch booch   4096 2010-09-13 23:45 .
drwxr-xr-x 83 booch booch   4096 2010-09-13 23:41 ..
drwxr-xr-x  2 booch booch   4096 2010-09-13 23:45 09_13_2010
ls -la
drwxr-xr-x  3 booch booch   4096 2010-09-13 23:45 .
drwxr-xr-x 83 booch booch   4096 2010-09-13 23:41 ..
drwxr-xr-x  2 booch booch   4096 2010-09-13 23:45 09_13_2010

Для тех, кто не хочет, что-бы готовые файлы замещали исходники, используйте этот скрипт:

#!/bin/bash
echo " "
echo  "--===www.linuxspace.org==--"
echo " "
 
for i in *.JPG
 do
  echo "Working on $i ..."
  convert "$i" -resize 800000@ -quality 80 "small.$i"
 done
echo " "
echo "... Done!"
echo " "
exit 0
#!/bin/bash
echo " "
echo  "--===www.linuxspace.org==--"
echo " "
 
for i in *.JPG
 do
  echo "Working on $i ..."
  convert "$i" -resize [email protected] -quality 80 "small.$i"
 done
echo " "
echo "... Done!"
echo " "
exit 0

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

Метод второй, графический

Данный метод больше подойдет тем, кто не любит по каким то причинам использовать консоль. Для вас существует замечательная программа Converseen. С приятным графическим интерефейсом. Установить программу себе в систему:

Для Ubuntu 10.04 & Ubuntu 10.10

sudo add-apt-repository ppa:samrog131/ppa
sudo apt-get update && sudo apt-get install converseen
sudo add-apt-repository ppa:samrog131/ppa
sudo apt-get update && sudo apt-get install converseen

Для Fedora:

yum install converseen
yum install converseen

Далее вы найдете программу в “Приложения” – “Графика” – Сonverseen

Так выглядит интерфейс программы

Снимок

Программа “при исполнении” обязанностей

Снимок-1

У программы простой и доступный интерфейс. Она не русифицированна, но там и так все понятно. Без труда можно указать разрешение фотографии как в процентах так и в пикселях. Программа поддерживает огромное колличество форматов. Можно указать каталог куда складывать готовые фото. Сделать так, что-бы они не замещались, а создавались новые с пометкой copy.

Всё это может без труда делать скрипт, но если вам так нравиться больше, то пожалуйста! Надеюсь статья оказалась вам полезной и была интересной.