Демотиваторы
Все мы знаем ныне популярный формат картинок в интернете - демотиваторы. Известен так же и бум , связанный с ними. Программы для создания демотиваторов были написаны на огромном множестве языков программирования. Но линуксоид во всем и всегда должен быть первым =) Внесу свою скромную лепту. Создаем демотивационные постеры одной командой при помощи скрипта!
#!/bin/sh # Demotivation by William Meth # ver. 0.4 Copyleft (C) 2009 BSD license # # Отправляйте Ваши замечания и предложения на veyko2002'at'gmail.com # # Thanks to: # ramok by http://linsovet.com # code cleaning # # TODO: Сделать так чтобы опции решали необязательные параметры, а синтаксис # сводился к виду demotivation [-HoFfSsC ] "входящее изображение" "текст # заголовка" "текст пояснения" # Коды ошибок ERROPT="1" # Неверная опция ENOVALUE="2" # Не прописано значение опции ENOIMAGE="3" # Не дан входной файл ESCALE_ERR="4" # Не получилось изменить изображение ENODEPS="5" # Нерешенные зависимости ESHIT="255" # Маловероятная ошибка #несколько технических переменных MYNAME=`basename $0` #получаем имя скрипта RC=$HOME/.${MYNAME}rc #Место нахождения конфига. #Создаем файл ресурсов, если еще не существует. #Пожалуйста, не изменяйте свои параметры тут! Для этого есть конфиг. if [ ! -f "$RC" ]; then cat << END_OF_RC > $RC DEST="dem\$(date +%N).png" # Имя файла H_FONT="/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf" # Шрифт заголовка T_FONT="/usr/share/fonts/TTF/dejavu/DejaVuSans.ttf" # Шрифт пояснения H_SIZE="64" # Размер заголовка T_SIZE="32" # Размер пояснения SCALE="640" # Размер END_OF_RC fi # считываем конфиг файл . $RC #Проверка наличия необходимых компонентов which convert &> /dev/null if [ $? -gt 0 ]; then echo 'Для корректной работы программы требуется пакет "ImageMagic"' 1>&2 exit $ENODEPS fi motivator_help() { cat << END_OF_HELP $MYNAME - Генератор демотиваторов Использование: $MYNAME -i КАРТИНКА [-o КАРТИНКА] [-h ТЕКСТ] [-t текст] [-f ШРИФТ] [-F ШРИФТ] [-s РАЗМЕР] [-S РАЗМЕР] [-C ЧИСЛО] Опции: -H - Показать эту справку -i - Исходное изображение -h - Текст заголовка -t - Текст пояснения -o - Выходной файл -F - Шрифт заголовка -f - Шрифт пояснения -S - Размер заголовка -s - Размер пояснения -C - Размер изображения Для изменения параметров по умолчанию, редактируйте файл $RC END_OF_HELP } motivator_getopts() { while getopts ":i: h: t: o: f: F: s: S: C: H" optname; do #получаем аргументы case "$optname" in "i") IMAGE="${OPTARG}" ;; "h") HEAD_TEXT="${OPTARG}" ;; "t") TERM_TEXT="${OPTARG}" ;; "o") DEST="${OPTARG}" ;; "f") T_FONT="${OPTARG}" ;; "F") H_FONT="${OPTARG}" ;; "s") T_SIZE="${OPTARG}" ;; "S") H_SIZE="${OPTARG}" ;; "C") SCALE="${OPTARG}" ;; "H") motivator_help; exit 0 ;; "?") echo "нет опции \"${OPTARG}\"! Используйте -H для справки" 1>&2; exit $ERROPT ;; ":") echo "Не указан аргумент для опции \"${OPTARG}\"" 1>&2; exit $ENOVALUE ;; *) echo "Неизвестная ошибка" 1>&2; exit $ESHIT ;; esac done #Проверяем наличие входного файла if [ -z "${IMAGE}" ]; then echo -e 'дайте мне исходную картинку!\n' 1>&2 motivator_help exit $ENOIMAGE fi } #------Основной код------ #получаем аргументы motivator_getopts "${@}" #Изменяем размер convert -scale "${SCALE}" "${IMAGE}" "${DEST}" &> /dev/null if [ $? -gt 0 ]; then echo 'Ошибка изменения размера изображения' 1>&2 exit $ESCALE_ERR fi #Делаем рамку mogrify -bordercolor black -border 2 \ -bordercolor white -border 2 \ -bordercolor black -border 70x0 "${DEST}" #Пишем заголовок if [ -n "${HEAD_TEXT}" ]; then montage -geometry +0+0 -background black -fill white \ -font "${H_FONT}" \ -pointsize "${H_SIZE}" -label "${HEAD_TEXT}" "${DEST}" "${DEST}" fi #Пишем пояснение if [ -n "${TERM_TEXT}" ]; then montage -geometry +0+0 -background black -fill white \ -font "${T_FONT}" \ -pointsize "${T_SIZE}" -label "${TERM_TEXT}" "${DEST}" "${DEST}" fi #Если был заголовок или пояснение, делаем поля if [ -n "${HEAD_TEXT}" -o -n "${TERM_TEXT}" ]; then mogrify -bordercolor black -border 5x45 "${DEST}" fi exit 0 #все хорошо, закончили. Уходим отсюда!
(3 голоса)
- 7016 просмотров
Страница для печати

Спасибо за скрипт, пригодился для конкурса -
Такая же проблема, нужен модуль для создания демотиваторов на сайте - verydemotivational.ru, может кто нибудь поможет?
пишите через обратную связь, отблагодарю.
баг - при слишком длинном тексте он не переносится, а уходит за границу. можно как-то исправить?
Очень прошу расскажите как к сайту прикрутить сеё чудо?
ESHIT=265 ... Действительно фиговая ошибка :) Особенно учитывая то, что ерроркоды имеют размер в один байт ;)
бгг) Правда что ли? Вот черт) bugfix
ESHIT=255
fixed
очень и очень хорошо. а что бы вообще было прекрасно то можно добавить такие фичи:
0. вместо ${0} использовать только имя скрипт.
если пользователь вызовет скрипт как ~/bin/скрипт, то basename уберет ~/bin/
1. конфиг файл. заносим нужные переменные в ~/.ИМЯСКТИПТАrc и считываем его потом при запуске
и можно еще добавить опцию "генерация конфиг файла"
что бы можно было сделать
./скрипт -z > ~/.скриптrc
и получить конфиг файл с установками по умолчанию.
или создавать конфиг молча, если его нет (многие проги так и делают)
2. имена переменных с ошибками лучше начинать с E, такая традиция. посмотри в man errno
3. установленые программы лучше проверять по which. у кого то imagemagick может стоять в /usr/local/bin
4. [[ и ]] это башизмы и можно и без них.
тогда можно будет убрать bash и оставить sh.
и скрипт автоматически будет работать и на *BSD системах
5. -i параметр можно и убрать, а брать картинку из того что осталось после разбора параметров.
и демативатор подразумевает текст. так что к обязательным параметрам относятся картинка и текст.
./скрипт картинка.jpg "много много текста в заголовок" "много текста в пояснение"
6. в копирайты добавить email автора. что бы слали патчи и пожелания
и повторюсь, скрипт хорош, а это просто для того что бы сделать совсем хорошо Ж:-)
Знал куда выкладываю, дело советуешь! Еще, угадай чей ник вместе с моим мылом добавится в копилефты?:) Сейчас после работы, сил нет. Просплюсь и поколдую над исправлением скрипта, все будет согласно рекомендациям. Реализацию *rc не хочешь на себя взять, чтобы было согласно стандартам? я в никсах ну очень недавно, месяц вот исполнился. Опять по части стандартов накосячу, стыдно будет! (чертовы буквы E) А вот по части "башизмов", я не большой фанат *BSD, но написанное однажды должно работать везде, с этим согласен. Попробуем сделать портативным (еще бы убедиться, что имиджмэджик под *BSD есть, я погуглю. А то будет забавно).
> Реализацию *rc не хочешь на себя взять, чтобы было согласно стандартам?
стандартов как таковых нет. просто в шел скрипте самое простое (и часто этим пользуются) сделать текстовый файл с объевлением шеловских переменных и запускать его потом в текущем шеле. что команда . (точка) и делает.
название локального конфига нафинается на точку, и заканчивается на rc. вот и все
> я в никсах ну очень недавно, месяц вот исполнился. Опять по части стандартов накосячу, стыдно будет!
если действительно месяц то впечатляет. а не ошиается только тот кто ничего не делает Ж:-)
насчет башизмов, в debian (и убунту как я подозреваю) есть пакет devscripts, в ктором есть скрипт checkbashisms.
он основные башизмы в скрипте проверяет и выдает предупреждения
> еще бы убедиться, что имиджмэджик под *BSD есть,
они там есть Ж:-) и достаточно проверки с which как я сказал.
Ждем ебилдов :)
По семейным причинам не мог заняться обещанным, приношу свои извенения ;( Для тех, кто до сих пор ждет ебилдов - вот вам версия 0.4.
Ченджлог - вынесен файл конфига, исправлены мелкие недочеты, убран мат и раздолбайство, теперь он работает под *BSD.
TODO - Сделайте так чтобы опции решали необязательные параметры, а синтаксис сводился к виду
demotivation [-HoFfSsC ] "входящее изображение" "текст заголовка" "текст пояснения"
Проверьте, пожалуйста, как он работает во фряхе (хотя бы). У меня нету возможности.
спасибо за долготерпение, любители демотивационных постеров. Извините еще раз за то, что за быдлокод творится выше.
Ramok - огромное спасибо за подсказку о пакете. Очень удобный. У меня Manrdiva, убунту я органически не перевариваю за то, что считает себя умнее юзера. К тому же, скажем прямо - кеды под нее убоги, а гном лично я не очень люблю. /*Это утверждение ИМХО и не призывает к началу дискуссии в топике о том, какой дистрибутив круче.*/до Дебиана я, пожалуй, еще не дорос, я все-таки пока пионерия и ламер. Страшновато переходить на "взрослые" дистры. Хотя, в принципе, для настройки системы под себя уже успешно использую vim "конфигурационный файл". Тем не менее, я успешно прикрутил к ней dpkg, apt-rpm, репы PLF и все необходимое для сборки пакетов руками. После вдумчивой заточки напильником под себя, дистрибутив радует меня проверенными обновлениями, хорошей поддержкой виндовых приложений, неплохим репом и свежими проприетарными дровами. Лично мне нравится)) Пробовать что-то еще боюсь, может быть потом.
перенес код в совет, по мелочам поправил
так держать Ж:-)
Большое спасибо ) Только вот оба кодера облажались, Ведь видно же, подсветка синтаксиса даже затупила. Лишнюю кавычку сунул. Вот, выкладываю релиз 0.4 версии :) Теперь все верно, заодно еще раз по мелочам прошелся по коду, нормализовал оформление, синтаксис ерунды и комментирование, убрал незамеченные раннее остатки слэнга в выводах (писалось в качестве теста своих возможностей, для публикации вообще не планировалось. Но результат понравился, и мы имеем то, что мы имеем.
Привет всем! А можно пошаговую инструкцию как установить этот скрипт?
Я просто в этом не шарю, мой сайт rusdemotivator.ru и мне очень нужно чтобы посетители могли создавать демотиваторы на сайте! Движок у меня dle
Буду благодарен ($-договоримся) если ктонибудь поможет!
Пишите на мыло
Отправить комментарий