Сисадмин-любитель (ulrith) wrote,
Сисадмин-любитель
ulrith

Как выцепить подписи к картинкам в Picase

Продолжаем обучение юнегз вэю на страницах этого журнала.

На днях я себе придумал очередную интересную задачу. Все мы (я надеюсь) пользуемся для хранения и обработки фотог прекрасной бесплатной программой от Гугля под названием Picasa. В этой программе, кроме всего прочего, можно добавлять к фоткам подписи, которые потом, например, чудесно отображаюццо в веб-альбомах. Но што делодь если хочеццо эти подписи изъять ис программо для каких-то других нушд? Каких? Щаз объясню.

Полгода назад мне подарили фоторамку. Тод кто еще черес это не прошол, знайте: фоторамка это такой зверь, у которого впереди ещо миллионы лет эволюции. А пока он находиццо на уровне развития червяка. Так что ожидать что показывающая слайд-шоу фоторамка сможет показать ещё и подписи к картинкам, взяв их ис каких-нибудь EXIF-полей, смешно и наивно. Даже калькулятор этого не может, а тут - фоторамка. (Да и сама Picasa, как это не прискорбно, в режиме слайд-шоу подписи к картинкам не отображает.)

А я вот захотел штобы у меня на фоторамке не просто фотки крутились, но еще и с подписями. Решение очевидно: внедрить подписи в сами фотки, в жпек. Но для этого их сначала нужно вынедрить из самой Picasa. Сделаем это в стиле классического юнегз-вэя.

1. Сначала делаем из Picasa "Экспорт в формате html" наших фотог, выбирая шаблоном "Код XML". В результате кроме фотог мы получаем еще и файл index.xml, в котором есть такие вот строки:

<itemName>
p1010025.jpg
</itemName>
...
<itemCaption>
Школа ESE (Мальта). Студенческое кафе SpeakEasy
</itemCaption>

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

2. Далее мы призываем на помощь Силу Юнегз Вэя и команду grep, которая может искать в файлах строки. После запуска вот такого сценария с именем xml-файла в качестве первого параметра, и именем выходного файла в качестве второго параметра:
#!/bin/sh

grep -A1 '<itemName>' $1 | grep -v '<itemName>\|--' | tr -d '\t\r' | tr -s '\n' > temp1
grep -A1 '<itemCaption>' $1 | grep -v '<itemCaption>\|--' | tr -d '\t\r' | tr -s '\n' > temp2
paste temp1 temp2 > $2
rm temp1 temp2

мы получаем файлег в котором аккуратно сложены нужные нам строки, разделённые табами:

p1010025.jpg[таб]Школа ESE (Мальта). Студенческое кафе SpeakEasy
...

И делай теперь с ним что хочешь!

Объясню для любопытных что же значило приведённое выше закленанее.
1. grep-ом я сначала выбрал из исходного файла все строки с нужным нам тегом + следующая строка, в которой, как можно заметить, и сидят сами значения.
2. Следующим грепом я избавился от этих тегов и строк с двумя минусами, которые добавил предыдущий греп.
3. Первой командой tr я удалил все табы и возвраты каретки, второй сократил все переводы строки идущие подряд до одного.
4. Данную аперацею я проделал дважды: первый рас для эмён файлоф и фторой рас для подпесей.
5. Командой paste я слил два файла - первый с именами файлов и второй с подписями - в один.
6. Убрал за собой мусор.

Все эти команды - это небольшие программки для обработки текстовых файлов, которых в юнегсе водиццо немеряно.

Теперь нам надо на основе полученного файлега расставить подписи по фоткам. Это может сделать уже описанный тут магический ImageMagick. Вот другой сценарий, который пишет в фотки надпесь (кстати, на полупрозрачном фоне!) сообразно нашему файлегу (который мы ему скармлеваем в качестве параметра командной строки):
#!/bin/sh

while read FILENAME CAPTION
do
convert $FILENAME -gravity south -fill white -undercolor ’#00000080’ -font ’Trebuchet-MS-Обычный’ -pointsize 18 -annotate 0 "$CAPTION" -quality 90 $FILENAME
done < $1

Вот таг. Ну што ш, остаеццо только предъявить пример результата операцеи:



(За нископробность фотки прошу простидь.)
Tags: imagemagick, unixway
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments