Disclaimer: весь этот расказ напоминает известный анекдот о том, как лечить головную боль. От которой нужно приянть аспирин, от него заболит живот, его лечат фесталом, от которого болят почки, которые надо лечить .... И т.д., пока круг не замыкается на головной боли ...
У меня есть цифровой фотоаппарат. Очень полезная штука для фотографий типа "семья синюшных утопленников с красными глазами и обрезаными ногами дружно лопает манную кашу" (с)ru.photo.digital. Наснимал, слил по шнурки, и вперед - показывать всем жаждущим и страждущим. Но есть одно "но" - снимки-landscape перед показом не мешало бы развернуть.
Очень быстро выяснилось, что использование ImageMagic, gimp, PhotoShop и т.п. програм имеет один большой отрицательный эффект - все они стремятся распаковать JPEG в некоторое внутреннее представление, повернуть и запаковать по-новой. Как правило, с гораздо более низким quality, чем у оригинальной картинки. Кроме того, безвозвратно теряется драгоценная EXIF info.
Решением стал пакет libjpeg-mmx-progs, позволяющий делать вращение JPEG-а путем манипуляции с матрицей коэффициентов DCT, без распаковки картинки. Правда, терялась EXIF инфо. От этого спасла утилита jhead, позволяющая сохранять EXIF info на время работы указаной утилиты, а потом возвращать его обратно.
Весь процесс оформился в виде двух скриптов - для вращения против часовой стрелки и по часовой:
jpeg-rot-90:
jpeg-rot+90:
Если мне надо снять "вертикальный" кадр, я всегда поворачиваю аппарат "против часовой стрелки". Таким образом, мой workflow по повороту фоток крайне прост - с помощью однократного прохода по thumbnail-ам фотографий я могу получить список "неправильных" снимков, которые затем автоматически развернуть.
К моему крайнему неудовольствию, выяснилось, все прочие люди при съемке стремятся повернуть фотоаппарат "в другую сторону", и, если я просил кого-то снять меня на фоне знаменитого Запупыринского Златоглавого Собора, то потом мне придется поворачивать эту фотографию "в другую сторону", и, как легко догадаться, отнюдь не в один проход.
Поскольку для просмотра картинок я пользуюсть преимущественно вьювером по имени feh, который умеет по нажатию hot key обрабатывать текущую програму указаной утилитой, я приспособил все те же скрипты к нему. Получилось вот что:
feh-rotate-left:
feh-rotate-right:
После того, как все фотографии развернуты в нужную сторону, можно сгенерировать с них "контакты":
feh-make-index:
У меня есть цифровой фотоаппарат. Очень полезная штука для фотографий типа "семья синюшных утопленников с красными глазами и обрезаными ногами дружно лопает манную кашу" (с)ru.photo.digital. Наснимал, слил по шнурки, и вперед - показывать всем жаждущим и страждущим. Но есть одно "но" - снимки-landscape перед показом не мешало бы развернуть.
Очень быстро выяснилось, что использование ImageMagic, gimp, PhotoShop и т.п. програм имеет один большой отрицательный эффект - все они стремятся распаковать JPEG в некоторое внутреннее представление, повернуть и запаковать по-новой. Как правило, с гораздо более низким quality, чем у оригинальной картинки. Кроме того, безвозвратно теряется драгоценная EXIF info.
Решением стал пакет libjpeg-mmx-progs, позволяющий делать вращение JPEG-а путем манипуляции с матрицей коэффициентов DCT, без распаковки картинки. Правда, терялась EXIF инфо. От этого спасла утилита jhead, позволяющая сохранять EXIF info на время работы указаной утилиты, а потом возвращать его обратно.
Весь процесс оформился в виде двух скриптов - для вращения против часовой стрелки и по часовой:
jpeg-rot-90:
#!/bin/bash jhead -cmd "jpegtran -rotate 270 &i > &o" "$@"
jpeg-rot+90:
#!/bin/bash jhead -cmd "jpegtran -rotate 90 &i > &o" $*
Если мне надо снять "вертикальный" кадр, я всегда поворачиваю аппарат "против часовой стрелки". Таким образом, мой workflow по повороту фоток крайне прост - с помощью однократного прохода по thumbnail-ам фотографий я могу получить список "неправильных" снимков, которые затем автоматически развернуть.
К моему крайнему неудовольствию, выяснилось, все прочие люди при съемке стремятся повернуть фотоаппарат "в другую сторону", и, если я просил кого-то снять меня на фоне знаменитого Запупыринского Златоглавого Собора, то потом мне придется поворачивать эту фотографию "в другую сторону", и, как легко догадаться, отнюдь не в один проход.
Поскольку для просмотра картинок я пользуюсть преимущественно вьювером по имени feh, который умеет по нажатию hot key обрабатывать текущую програму указаной утилитой, я приспособил все те же скрипты к нему. Получилось вот что:
feh-rotate-left:
#!/bin/bash feh -t -A "jpeg-rot-90 '%f'" -E 100 -y 100 "$@"
feh-rotate-right:
#!/bin/bash feh -t -A "jpeg-rot+90 '%f'" -E 100 -y 100 "$@"
После того, как все фотографии развернуты в нужную сторону, можно сгенерировать с них "контакты":
feh-make-index:
feh --index -s -y 200 -E 200 -O index200.jpg `find "$@" -type f`