Показаны сообщения с ярлыком фото. Показать все сообщения
Показаны сообщения с ярлыком фото. Показать все сообщения

пятница, 26 июня 2009 г.

Сортировка фотографий

Часто бывает так, что на фотике собирается куча фотографий снятых в разные дни и по разному поводу. Сливаешь их потом на комп и начинаешь сортировать - от сих до сих тётя Глаша в гамашах, от тудова до сюдова брат Григорий на заборе. К тому же имена фотографий совершенно "не говорящие" - какой-нибудь DSC0075.JPG...

А бывает, что есть несколько наборов фотографий, например кто-то снимал параллельно с вами. Хорошо бы их объединить и отсортировать по времени, но дурацкие имена (DSC0075.JPG !) не дают этого сделать. Выход простой - переименовать файлы, что бы в начале имени была дата. Причём обязательно от старших компонент к младшим: год-месяц-день-час-минута-секунда, иначе, например для шаблона день-месяц-год никакой вменяемой сортировки не получится.

Короче, набросал небольшой скрипт, переименовывающий пачку JPEG файлов по шаблону '<дата> <время>.jpg' Плюс к этому он разбрасывает их по дням, если хорошо попросить.

Работает в Линуксе, что само собой и в Windows из под Cygwin. Нужно только не забыть установить утилиту exif.

Итак скрипт с пояснениями:

#!/bin/bash

# (1)
if [[ $1 == "-h" || $1 == "--help" ]]; then
echo "usage: $0 [-d] [name suffix]"
echo "option -d create directories for each day";
exit;
fi

# (2)
CREATE_DIR=0
if [[ $1 == "-d" ]]; then CREATE_DIR=1; shift; fi

# (3)
for f in *.jpg *.JPG; do

# (4)
if [[ $f == "*.jpg" || $f == "*.JPG" ]]; then continue; fi

# (5)
DATETIME=$(exif -i "$f" | grep 0x9003 | sed -r 's/.*\|//; s/:/-/g; s/ *$//')
DATE=$(exif -i "$f" | grep 0x9003 | sed -r 's/.*\|//; s/:/-/g; s/ *$//; s/ .*$//')
if [[ $DATE == "" || $DATETIME == "" ]]; then continue; fi

# (6)
[[ ! -d $DATE && $CREATE_DIR == "1" ]] && mkdir -p $DATE
echo $f

# (7)
DST="${DATETIME}${1}.jpg"
if [[ $CREATE_DIR == "1" ]]; then DST="$DATE/${DATETIME}${1}.jpg"; fi

# (8)
mv "$f" "$DST"
done


1. Покажем помощь, если попросят
2. Проверяем наличие опции -d, создающей директории на каждый день
3. Пробегаем по всем файлам *.jpg и *.JPG (Мой фотик почему-то любит большие буквы, а Линуксу это критично)
4. Если по маске не найдено ни одного файла, то переменной присваивается сама маска. Это как-то непонятно, логичнее было бы присвоить пустоту, но это так в zsh по крайней мере. Пропускаем эту маску.
5. С помощью утилиты exif вычитываем дату создания (тех 0x9003) и дату-время. Если они пусты, пропускаем файл.
6. Если была опция -d и нужной директории нет - создаём её.
7. Конструируем имя файла(jpg в нижнем регистре, итить его мать этот фотик). Если была опция -d, добавляем к имени "директорию дня"
8. Перемещаем файл.

Использовать так:
sort-photos.sh
Переименует все фотки в формат "<дата> <время>.jpg"


sort-photos.sh -d
Плюс ко всему рассортирует фотографии по дням.


sort-photos.sh ' Мой отпуск'
Добавит в имя файла суффикс. Не забудьте лидирующий пробел! Получится что-то вроде '2009-01-23 14-00 Мой отпуск.jpg'

понедельник, 13 октября 2008 г.

Сортируем фотки

Когда я фотографирую что-нибудь, я обычно делаю кучу снимков. Авось среди них будет один-два приличных. Порочная практика, но пока другую не освоил. Один из недостатков - большое количество почти одинаковых файлов, которые надо сортировать, что конечно же делать не всегда хочется.
Особенно мне не нравится большой размер файла. Ноутбук у меня не самый быстрый, а фотографировать я люблю в хорошем качестве и максимальном разрешении. Поэтому, когда смотришь фотографии, оные могут грузится по 0.5-1 секунды. Пока просто смотришь, это ещё ничего, заставляет задуматься и искать сюжет там, где его отродясь небыло, но при сортировке это создаёт только проблемы.

Поэтому, я подумал и нашёл пару приёмов, для облегчения чистки таких фото-помоек.
Во-первых фотки надо уменьшить - и по размеру и по качеству:

# mkdir small
# for i in *.JPG; do echo $i; convert -resize 50% -quality 70% $i small/$i; done

Запускаем из директории с кипой фотографий. При этом создаётся поддиректория small и в неё помещаются копии фотографий с 50% размером от оригинала и 70% качеством (у оригиналов около 95%)
Файлы получаются достаточно маленькие для быстрого листания их туда сюда в попытке выяснить что оставить, а что удалить.
Заходим в поддиректорию small, запускаем свой любимый просмотрщик картинок(мне, например, нравится gwenview, так как у него есть просмотр миниатюр файлов в директории). Запускаем, и начинаем удалять ненужное. Обычно урезанного качества хватает, что бы понять, какая фотография лучше а какая должна отправиться в корзину. В противном случае придётся посмотреть на оригиналы.

Итак, набор маленьких фотографий урезан. Теперь пришло время синхронизировать его с оригинальным набором.

# cd ..
# mkdir 2erase
# for i in *.JPG; do [[ ! -e small/$i ]] && mv $i 2erase/$i; done

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

Вот и всё.

P.S. Ещё команда, для изменения регистра имен файла. Мой фотоаппарат почему-то считает, что IMG_7746.JPG выглядит лучше чем img_7746.jpg. Но я уверен в обратном:

# for i in *.JPG; do
newname=$(echo $i | tr '[:upper:]' '[:lower:]')
mv "$i" "$newname"
done

четверг, 21 августа 2008 г.

Обрабатываем фотографии для блога

Последние 2 поста были прямо таки нашпигованы фотографиями. Разумеется, все они прошли некоторый осмотр и обработку:
1. Коррекция уровней
2. Кроп
3. Увеличение резкости
4. Изменение размера до 33%
5. Уменьшение качества до 80-85%
Последние 2 пункта нужны, чтоб не выкладывать 2-х мегабайтные файлы на блог. Кому они нужны, это же не "шыдевры"? После такой обработки фотографии весят около 200 кБ, что вполне приемлимо.
Первые 3 пункта разумеется нужно делать руками под неусыпным контролем, но вот последние 2... Их просто таки необходимо автоматизировать. Чем? Да вот хотябы imagemagick.
Вобщем, всё просто - будем использовать программу convert или modrify. Первая записывает результат в новый файл, а вторая меняет поданный на вход файл, что удобно и страшно.
Отконвертировать все jpg:
for i in *.jpg; do modrigfy -resize 33% -quality 85% $i; done

или, что боле безопасно
for i in *.jpg; do convert -resize 33% -quality 85% $i new-$i; done


Разумеется под виндой тоже можно такое написать, но там какой-то нечеловеческий язык BAT файлов... Тамошний FOR долго меня истязал перед тем, как заработать...

понедельник, 9 июня 2008 г.

А не купить ли мне....

Вышел не балкон, сфотографировал местный закат. После проявки (aka скачивания на комп) посмотрел фотографии и расстроился - уж слишком шумные. Шум на шуме сидит, и... да, шумом погоняет. Сижу теперь с очередной навязчивой идеей купить зеркалку.

Вот что фотографировалось. Уменьшено в 3 раза.


А вот, кроп со 100% размера. Шумы, как я уже упоминал так и прут.


Вот и думай тут....

пятница, 28 сентября 2007 г.

RAW формат цифровых фотографий

Неожиданно нашёл в своём фотике возможность сохранения в RAW формат. Провёл небольшой эксперимент по теме стравнения качества. Совсем простой. Сфотографировал местный пейзаж, открывающийся из окна офиса. При этом фотик сделал сразу 2 фотографии - JPG и RAW. Настройки JPG - наилучшее качество.

Далее достал из RAW данных 16-битный TIFF и открыл его в GIMP. Но ! GIMP Не поддерживает 16-битные картинки, поэтому картинка была порезана при открытии до 8-и бит !

Затем я выделил примерно одинаковый кусок неба на обоих фотографиях и инструментом Levels сжал диапазон цветов, что-бы проявить небо. После этого оба участка были немного размыты.

JPG

RAW


На JPG явно заметно покраснение неба, тогда как на RAW - ничего подобного. Опять таки, повторюсь, что при этом GIMP ещё и немного порезал качество RAW. В Photoshop всё будет ещё лучше. Насколько - посмотрим.