Главная / Блоги / garry's blog
Конвертирование *.jpeg файлов в другое разрешение в Linux.
Как-то раз, вернувшись домой после очередной прогулки с фотоаппаратом, мне нужно было отослать некоторые и фотографий на мыло моей девушке.Однако, даже при небольшом разрешении моего фотоаппарата (5 MPx) фотографии получаются довольно громоздкими - больше 2 Мб.
Немножко погуглив я нашел утилитку convert из пакета ImageMagick, которая очень многое умеет, в том числе и ковертировать файлы по разрешению.
Только вот по одному файлу конвертировать слишком долго и я написал скрипт использующий convert и позволяющий конвертировать все *.jpeg файлы из нужной папки.
Синтаксис следующий:
~$: ./jpeg_conv source_dir target_dir width quality
source_dir - директория с исходными картинками. По умолчанию - текущая.
target_dir - директория, где будут созданны измененные изображения. Создается автоматически. По умолчанию, в исходной папке с картинками создается папка converted_image.
width - ширина получившихся файлов в пикселях. Высота высчитывается автоматически, картинка масштабируется. По умолчанию - 1024px.
quality - качество получаемых картинок. По умолчанию - 50.
Ну и собственно пример:
~$ ./jpeg_conv ~/myphoto ~/my_little_photo 640 40
И, разумеется, сам код:
#!/bin/sh #-----здесь мы определяем есть ли исходная директория(первый параметр). #-----Eсли нет, исходной считается текущая if [ -z $1 ] then from_directory=`pwd` else from_directory=$1 fi #-----определяем, указана ли папка назначения(второй параметр). #-----Если нет, то в исходной папке создается каталог с именем converted_image if [ -z $2 ] then to_directory=$from_directory/converted_image else to_directory=$2 fi #-----Указана ли ширина изображения(третий параметр). #-----Если нет, то ширина по умолчанию - 1024 if [ -z $3 ] then width="1024" else width=$3 fi #-----Указано ли качество будущего изображения(четвертый параметр), если нет то #-----принимается равным - 1024 if [ -z $4 ] then q_image=50 else q_image=$4 fi mkdir $to_directory #создаем директорию куда будем сохраняь файлы for i in $from_directory/* #получаем полный путь к файлам из исходной директории do test_file=`file -b -i $i` #получаем тип файлы if [ "image/jpeg" = $test_file ] then #извлекаем имя файла file_name=`basename $i` #конвертируем в другое разрешение и сохраняем convert $i -resize $width -quality $q_image $to_directory/$file_name #выводим сообщение echo $from_directory/$file_name converted to $to_directory/$file_name fi done
Скачать скрипт можно отсюда или в приложении к посту)
Сохраняем его в нужную папку, потом присваиваем права для запуска:
~$ chmod 755 jpeg_conv
И можно пользоваться)))
Разумеется что для работы скрипта необходим ImageMagick. Надеюсь, что сия поделка кому-то будет полезной, особенно начинающим).
P.S. не судите строго)..второй мой скрипт и первая статья)
| Вложение | Размер |
|---|---|
| jpeg_conv.txt | 2.93 кб |
- garry's blog
- 2757 просмотров
Страница для печати

Кхе-кхе. Расширение... Никто не знает, есть ли у JPEG Cleaner Linux-версия? Исходный код вроде бы открытый... Эта программа счищает с gif и jpg все комментарии, вроде "Чем было сфотографировано, при какой погоде, и чем редактировалось потом". С коллекций можно счищать гигабайты. Могу дать ссылку на Windows-версию, кому надо.
for p in in/*.jpeg; do convert $p -resize 1024 -quality 70 out/`basename $p`; doneИ всё? Зачем тогда и огород городить? А если имя файла неважно, то и вообще:
convert in/*.jpeg -resize 1024 -quality 70 "out/image_%d.jpeg"Ну, и до кучи:
from_directory="${1:-`pwd`}".P.S. Jpeg quality 50? Странные у вас отношения с девушками...
вот что бы каждый раз не "городить такой огород" и сделали скрипт.
причем тут quality 50 к отношениям с девушками? просвятите понепонимающего Ж:-)
PS
вместо `pwd` можно использовать $PWD
По-моему, проще и быстрее набрать одну команду, чем каждый раз вспоминать, как работает самописный скрипт. Который, к тому же, будет забавно себя вести, если вместо целевого каталога окажется файл.
Это вопрос идеологический. Не надо скриптовать команды прямого построения (это когда они как думаются, так и пишутся). Иначе мы в конце концов получим сотни мелких скриптов, решающих частные задачи. Т. е. выйдет нечто вроде абсолютно неудобной, одномерной системы меню.
А чтобы меньше кнопок давить, есть ^R .
--
Чтобы показывать девушкам картинки с jpeg quality 50%, надо либо иметь неважное зрение, либо пренебрежительно относиться к девушкам.
Про $PWD опять забыл :( пальцы быстрее мозга шевелятся... а они pwd набирают чаще, чем $PWD.
если почаще использовать "IMHO", "мне ЛИЧНО удобней", "для МЕНЯ проще", "я для СЕБЯ выбрал", то к подобному тексту не будет никаких претензий Ж:-)
хотя все равно не вижу смысла так резко реагировать на первый скрипт начинающего
Если почаще использовать "IMHO", "мне ЛИЧНО удобней", "для МЕНЯ проще", "я для СЕБЯ выбрал", то подобные тексты будут в полтора раза длиннее и втрое невразумительнее. Надеюсь, никому из здесь присутствующих ещё не открылась абсолютная истина? И никто не подозревает в этом товарища? Так зачем же оговариваться?
Про резкость -- вы, конечно, правы. Просто сильно в глаза бросилось это вот "не там и не то". Человек пишет чистые (ну, почти) сценарии по всем канонам, пора теперь учиться маны до конца дочитывать и задачи ставить.
как раз для того что бы не выглядело так будто кому то эта абсолютная истина открылась
Ну всё-таки вы готовы подозревать товарища? Прискорбно :).
я конвертил в качестве 50 и нормально...вполне приемлемо.Про пренебрежение не надо. я сначала проверяю качество, потом отсылаю.И кстати по этому критерию судить о моем отношении к женскому полу как минимум опрометчиво и глупо.
А по теме ,как новичок, я тебе скажу, что мне проще одни раз прочитать ман и написать оболочку к convert с вполне понятными и легко запонимающимися параметрами, чем каждый раз городить указанную тобой команду.
В принципе действительно лучше написать гуевое приложение, чтоб для этого действия не надо было лазить в консоль.
Сотни мелких скриптов мы не получим.Я точно не получу, ибо у меня нет сотни мелких задач.
А то что было нужно мне, то я и написал. А пользоваться или нет - уэе ваше дело.)
Посмотрите в jpeg Q 50 с девятикратным увеличением на резкие границы. Некоторые люди видят краевые искажения с лёту, а некоторые видят, но не осознают... им просто неприятно смотреть. Вот я скорее о последнем.
Вы считаете, что вам придётся всего _один_ раз читать man по convert? Не может такого быть, вы же его видели :). От себя добавлю, что HTML-документация намного информативнее. А параметры легко запоминаются, когда они задокументированы, и запоминать их не надо. Не глядя в скрипт, можно ли уверенно вспомнить, сколько у него параметров, и в каком порядке они идут? Если освоить ^R -- наверное, вспоминать не придётся, но тогда и сам скрипт писать не надо, ^R отлично вспомнит и более длинную команду.
Совет. Из вашего скрипта сделать гуёвое приложение можно очень просто, добавлением пары команд
Xdialog --fileselect(илиkdialog --getopenfilename, если вам это ближе). Тогда задача решаться будет в четыре мышеклика + два выбора каталога. Что уже вполне сопоставимо по скорости с ^R + перевбитие двух имён каталогов.> у меня нет сотни мелких задач.
будут.. Ж:-)
$ ls ~/bin | wc -l 104А ещё хорошо поставить апплет для наутилуса, выделить все фотки, кликнуть правой кнопкой и сказать "resize". и всего делов.
не пользуюсь наутилусом. Погуглю на досуге, можно ли что-то такое прикрутить к Thunar.
Найду, отпишусь об впечатлениях)
Плохо работает на сервере
Если большие старые файлы не нужны — можно воспользоваться mogrify из того же ImageMagic.
спасибо, как раз вознила подобная проблема
пожалуйста))..рад что помогло..
а на хабре с этим отшили(
Отправить комментарий