Метки

30.09.2008

Подготовка фотографий к публикации в интернете. Часть 2.

Благодаря комментариям читателей узнал несколько интересных вещей по теме. Итак, во-первых, оказывается, convert умеет производить «умный» ресайз: достаточно вместо ширины ввести квадрат, например 1024x1024, тогда convert «впишет» изображение в этот квадрат, сохраняя соотношение сторон исходной картинки.

Во-вторых, при уменьшении картинки часто возникает необходимость в повышении чёткости оной. Более подробно об этом писал Владимир Долженко.

Ну и наконец, скрипт, на котором остановился я:


#!/bin/bash
WATERMARK="$HOME/.watermark.png"

echo "*****************************************"
echo "* Image Resize and Watermarking Script *"
echo "* By Gilbert Mendoza - SavvyAdmin.com! *"
echo "*****************************************"
echo " "

for i in ~/Photo_publ/*{.jpg,.jpeg,.png,.JPG,.JPEG,.PNG}
do
echo "Working on $i ..."
renrot --no-rename $i 1> /dev/null 2> /dev/null
convert -adaptive-resize 1024x1024 -sharpen 0.1 -normalize -quality 89 $i $i 2> /dev/null
composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null
echo "... Done!"
done
rm ~/Photo_publ/*_orig
exit 0
Теперь необходимость использования отдельных папок для «книжных» и «альбомных» фотографий отпала сама собой, поэтому достаточно одного скрипта. Кроме того, я добавил повышение резкости и использовал адаптивное уменьшение изображения, с цветовой нормализацией, плюс исправил удаление резервных копий, оставляемых renrot.

Ещё раз спасибо читателям за полезные комментарии!

Читать полностью.

Подготовка фотографий к публикации в интернете.

Не так давно я обзавёлся цифровой камерой, и на моём жёстком диске гордо заняла своё место и начала расти немалая стопка фотографий. Захотелось ими поделиться, но не тут-то было: мой асимметричный канал всяко противился загрузки фотографий в их исходном качестве (по 3,5 МБ на фото). Поэтому потребовалось придумать что-нибудь этакое, способное ресайзить фотографии пачками. Ещё мне хотелось поместить на них т.н. watermark («водяной знак») — поместить в один из уголков своё имя.

Под операционку имени Билла Гейтса существует множество платных программ, предназначенных специально для этих целей. Однако, у пользователей Linux есть более простые и гибкие инструменты, способные в считанные минуты справиться с этой задачей. Вот тут предлагается решение этой задачи. Это пример того самого преславутого «unix-way», когда несколько небольших строго специализированных программ справляются со своей задачей лучше и быстрее монстра-комбайна по переработке картинок.

Итак, для начала нам понадобится эти самые специализированные программы. Вышеозначенные действия умеют выполнять программы из комплекта Imagemagick. Кроме того, нам будет полезна утилитка, которая переворачивает картинку в соответствии с её EXIF-тегом (цифровые фотоаппараты определяют, когда ориентация снимка была книжной и прописывают это в EXIF-теге). В этом нам поможет renrot. Ставим всё необходимое:

$ sudo aptitude install imagemagick renrot

Это ещё не всё. Так как нам нужен «водяной знак», который мы будем накладывать на фотографии, не помешает его заранее приготовить. Автор руководства по ссылке предлагает сделать его в формате JPG. Но это не обязательно, поэтому если хотите «водяной знак» с прозрачным фоном — PNG вполне сгодится. Поскольку мы планируем пользоваться им постоянно, готовый знак рекомендую спрятать с глаз долой, спрятав его в скрытую папку, либо просто переименовав его таким образом, чтобы первым символом в названии файла была точка.

Теперь, непосредственно к механизму работы нужных нам программ. Для изменения размера изображения нам потребуется утилита convert. У неё довольно обширные возможности, однако, нас интересует изменение размера и jepg-качества картинки. Это действие производится с помощью команды:
$ convert -resize N -quality M исходный_файл.jpg конечный_файл.jpg

Где N — желаемая ширина в пикселях, например 1024, а M — желаемое jpeg-качество, например, 89. Если вместо конечный_файл.jpg задать исходный_файл.jpg, то утилита преобразует исходный файл и заменит его новой, уменьшенной (или увеличенной) версией. Для того, чтобы вклеить в картинку знак, нам потребуется утилита composite:
$ composite -gravity northeast -dissolve L знак.jpg исходный_файл.jpg конечный_файл.jpg

Эта команда встроит ваш знак.jpg в правый верхний (northeast) угол картинки, прозрачность (точнее, непрозрачность) задаётся значением L. Исходный файл также, как и в случае с предыдущей командой, может быть заменён конечным.

В целом, всё необходимое уже есть. Наш скрипт будет выглядеть примерно так:

#!/bin/bash
WATERMARK="$HOME/.watermark.png"

echo "*****************************************"
echo "* Image Resize and Watermarking Script *"
echo "* By Gilbert Mendoza - SavvyAdmin.com! *"
echo "*****************************************"
echo " "

for i in ~/Photo_publ/landscape/*{.jpg,.jpeg,.png,.JPG,.JPEG,.PNG}
do
echo "Working on $i ..."
convert -resize 1024 -quality 89 $i $i 2> /dev/null
composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null
echo "... Done!"
done
exit 0

Этот скрипт будет обрабатывать все файлы с расширениями .jpg, .jpeg, .png, .JPG, .JPEG, .PNG, находящиеся в папке ~/Photo_publ/landscape, заменяя их на новые. Знак находится в домашнем каталоге: ~/.watermark.png. При необходимости замените пути, не забудьте задать права на исполнение, разместите в /usr/local/bin и пользуйтесь.

Наблюдательные читатели уже заметили, что в вышеозначенном скрипте не фигурирует указанная мною ранее утилита renrot. Всё верно, этот скрипт предназначен для обработки «альбомно»-ориентированных изображений. Для «книжно»-ориентированных я предлагаю использовать следующий скрипт:

#!/bin/bash
WATERMARK="$HOME/.watermark.png"

echo "*****************************************"
echo "* Image Resize and Watermarking Script *"
echo "* By Gilbert Mendoza - SavvyAdmin.com! *"
echo "*****************************************"
echo " "

for i in ~/Photo_publ/portrait/*{.jpg,.jpeg,.png,.JPG,.JPEG,.PNG}
do
echo "Working on $i ..."
renrot --no-rename $i 1> /dev/null 2> /dev/null
convert -resize 768 -quality 89 $i $i 2> /dev/null
composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null
echo "... Done!"
done
exit 0

Во-первых, для этих картинок вам может понадобиться другой размер (меняем местами ширину и высоту), во-вторых, renrot создаёт резервные копии файлов при конвертировании (с расширением .*_orig), поэтому после эти файлы может понадобиться удалить. Всё остальное аналогично предыдущему, пути почти те же. Меняете, что нужно, добавляете атрибуты, кладёте в желаемое место, и пользуетесь. Длительность процедуры зависит от характеристик железа, всё-таки, работа с графикой требует от системных ресурсов многих усилий. Прежде, чем в полную силу использовать скрипт, рекомендую сделать резервные копии фотографий. Приятной обработки картинок!

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

Читать полностью.

25.09.2008

qutIM — полноценный icq-клиент для Linux.

Помнится, я очень сильно страдал из-за отсутствия полноценного асечного клиента в Linux: licq сразу же растерял мой контакт-лист, centericq не прижился из-за своей «консольности», мультипротокольные клиенты (и licq заодно с ними) страдали общей проблемой с кодировками (да, ася по-прежнему работает в местной cp1251 и всемирной utf-8 одновременно).

И это в то время как пользователи Windows обладали отличными асечными клиентами: Miranda, R&Q, qip. В начале текущего, 2008 года, на улице пользователей icq случился праздник: появился клиент qutIM, являющий собой полноценный аналог старого qip (и гораздо менее чудовищный на вид, кстати).

Этот кроссплатформенный клиент написан на C++, версии для Windows и OSX также доступны для скачивания.

Это контакт-лист icq. Те, кто пользуется или пользовался qip, сразу заметят сходство. Однако, у него есть замечательное отличие: в отличии от самого популярного программа поддерживает работу одновременно сразу с несколькими аккаунтами. При чём, эта функция реализована подобным gajim образом: контакт-листы разных аккаунтов можно либо интегрировать, либо держать отдельно друг от друга. qutIM полностью поддерживает X-статусы (!). Насколько мне известно, это единственный клиент icq для linux, обладающий этой функцией.

Окно чата напоминает старые версии qip. При выходе qutIM «запоминает» открытые в момент выключения программы окна и вкладки чатов, восстанавливая их при последующем запуске. Вкладки на момент закрытия окна также запоминаются, поэтому если вы закрыли окно с одной открытой вкладкой, а чуть позже решили пообщаться с другим контактом, будьте уверены, что когда вы откроете чат с ним, не закрытая ранее вкладка тоже будет восстановлена. В qutIM встроен набор графических смайлов (угадайте, каких? ^^ Тот же Kolobok, что и в qip).

Разработчик снабдил qutIM немаленьким набором настроек, аккуратно упакованных в многоуровневый конфигуратор. Часть настроек задаётся для каждого аккаунта по отдельности. qutIM поддерживает разнообразные темы и наборы графических смайлов.

Теперь и у нас, пользователей Линукс, есть отличный стендэлоун клиент для icq, способный удовлетворить пользователей этой службы мгновенных сообщений.


Читать полностью.

09.09.2008

Hab.la

В ленте случайно наткнулся на ссылку на сервис Hab.la, который позволяет встроить в вашу страницу виджет, дающий возможность начать чат в реальном времени между гостем и хозяином сайта. Основано это великолепие на протоколе Джаббер, при чём вам предлагается либо использовать аккаунт @Hab.la как отдельный JID, либо подключить его транспортом к вашему JID, поддерживается даже GMail. После регистрации вам предоставляется аккаунт, транспорт и html-код со ссылкой на ява-скрипт, который предлагается встроить в код страницы. Если ваш сервис не поддерживает встраиваемые ява-скрипты, можно подключить «кнопку», которая каким-то образом (уж простите, не силён в веб-технологиях), перенаправляет нажавшего на своего рода гейт, который позволяет открыть виджет чата и продолжить беспрепятственный сёрфинг по сайту. Максимально возможное число пользователей, с которыми можно вести чат — 5 человек, поэтому флуда быть не должно. В порядке эксперимента встроил в свой блог сам скрипт. Посмотрим, что из этого выйдет.

Читать полностью.

01.09.2008

О раскладках клавиатуры — 2

Рассказывая о раскладках клавиатуры в прошлый раз, я забыл упомянуть о типографской раскладке Ильи Бирмана. Исправляю это упущение. Особенностью этой раскладки является наличие ещё одного регистра клавиатурной раскладки: по клавише AltGr, или «правому Alt», мы получаем возможность использовать некоторые особенно полезные в блоггерском деле символы Unicode, например кавычки-«ёлочки» или кавычки-„лапки“, или, очень важный, но часто игнорируемый символ, — длинное тире, знак «ударе́ния» и знак §параграфа. Полный список символов можно обнаружить на сайте Ильи. Однако, он предлагает решение для Windows. Внимательный читатель найдёт в самом низу страницы с описанием типографской раскладки ссылку на некую «версию для Линукс».

«Поймав волну», я закатал рукава и принялся за правку конфига, предложенного Сергеем Столяровым, особенностями его решения были раскладка Winkeys для кириллицы (я хотел использовать виндовую машинопись) и переключение между кириллицей и латиницей комбинацией Shift_L+Shift_R (что мне кажется довольно неудобным). Обрадовавшись возможности, я решил убить сразу двух зайцев. Напомню, что Linux — очень гибкая штука, поэтому, взяв в руки напильник и разложив в поле пару граблей, я занялся правкой конфига. В итоге получилось вот это. Раскладки переключаются клавишей Caps_Lock (при этом индикатор работает в стандартном режиме: нажали — загорелся, нажали ещё раз — погас, если случайно переключите с помощью Shift+Caps Lock, рекомендую также переключать обратно, так как индикатор в этом случае менять состояние не будет, а раскладка переключится, кроме того, я оставил рабочей комбинацию Shift_L+Shift_R), пока зажат AltGr («правый Alt») можно вводить типографские символы.

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

$ xkbcomp ~/.xkb_config_tl $DISPLAY

Готово. Теперь до конца текущей сессии вы будете наслаждаться комбинацией из раскладок Ильи Бирмана, машинописи Windows и стандартной QWERTY. Стоит ли говорить о том, что этот конфиг можно легко подогнать под себя, например, поменять QWERTY на Dvorak?

Для того, чтобы отныне и всегда ваш новый конфиг запускался вместе с вашей сессией, придётся поплясать с бубном. Ковыряние ~/.xsession не дало результатов, хотя, возможно, я просто не смог с ним разобраться. Я воспользовался встроенным в Xfce4 менеджером автозагрузки, при чём назначил исполнение вышеозначенной команды в xterm:
$ xterm -e "xkbcomp ~/.xkb_config_tl $DISPLAY"

Думаю, любой из моих читателей сможет воспользоваться встроенными в рабочую среду средствами автозагрузки, или, если кто-нибудь из Вас знает, каким макаром прикрутить к этому великолепию ~/.xsession, поделитесь, пожалуйста, опытом — я думаю, он будет полезен не только мне, но и многим моим читателям.

Если вы хотите воспользоваться winkeys-вариантом, просто сравните оригинал и мою версию: Caps Lock настраивается в самом низу скрипта.

Читать полностью.