Restless 13.02.2010 19:18
Python — Скриншот в один клик мыши и интеграция с Dropbox
Часто ли вы делаете скриншоты? Я очень часто.При этом сделать скрин часто составляет лишь полдела, обычно приходиться заливать его на хостинг изображений, получить ссылку и уже потом кинуть ее на форум (другу, соц. сеть, подставить_свое). Теперь можно пропустить все эти действия и сделать всего один клик.
Программа сидит в трее и для того чтобы сделать скриншот, нужно просто кликнуть левой или средней кнопкой мыши по иконке. Предварительно нужно настроить программу, окно настроек вызывается из контекстного меню, где вы должны указать папку для сохранения скриншотов, папку для сохранения скриншотов в директории Dropbox (внимание! эта папка должна находиться обязательно в Dropbox/Public/, например: "/home/username/Dropbox/Public/Pictures/Screens" ) и указать id вашего аккуанта на Dropbox.
После клика мышкой по иконке в трее программа сделает скриншот и скопирует ссылку на него в буфер обмена, если скриншот был сделан в директорию Dropbox.
Узнать id своего аккуанта можно, посмотрев адрес любого файла в каталоге Public, напимер: адрес - http://dl.dropbox.com/u/9999999/file, значит id - 9999999.
Для работы программы необходим Dropbox, который должен быть запущен во время выполнения программы, python 2.6 (возможно подойдут версии и ниже, не проверял) и PyQt4. Необходимо распаковать архив с исходниками и сделать исполняемым файл screentodropbox.py.
Исходники

+ 0 -
Очень интересно. Но целый есть ряд минусов, с моей точки зрения. Предпочитаю пока такой вариант, но, как будет время, возможно сделаю собственный image-хостинг и более удобный интерфейс.
Вы могли описать минусы с вашей, субъективной точки зрения. Не холивара ради разумеется.
Ну имхо, конечно: Зависимость от конкретного сервиса. Программа сидит в трэе - занимает место визуально. Неудобный путь сохранения (хотя симлинк можно создать с правильного пути, конечно). Но больше всего отталкивает необходимость регистрации на дропбоксе. Если я не хочу его использовать по прямому назначению, считаю неадекватным регистрироваться там и устанавливать себе только из-за скриншотов.
Считаю, что нужно написать скрипт, выполняющий подряд простые действия, используя простые программы (scrot, curl) - сделать снимок экрана, залить его на сервер, получить ссылку на залитый снимок, отобразить ссылку. И/или отобразить локальное изображение. Причем настроить тот же scrot по удобству, задав опции в скрипте. Под себя настроить всё. Вот это, как я считаю, правильный путь решения проблемы.
Считаю, что нужно написать скрипт, выполняющий подряд простые действия, используя простые программы (scrot, curl) - сделать снимок экрана, залить его на сервер, получить ссылку на залитый снимок, отобразить ссылку. И/или отобразить локальное изображение. Причем настроить тот же scrot по удобству, задав опции в скрипте. Под себя настроить всё. Вот это, как я считаю, правильный путь решения проблемы.
Ясно. :) Dropbox вообще не под скриншоты в общем-то :). У него назначение принципиально другое.
имхо, это все же это удобнее, чем использование хостингов, давно использую его и в таких целях
писалось эта программка для себя за 2-3 часа, не было целью сделать ее универсальной, надо было упростить процесс снятия скриншотов, поэтому dropbox :)
Пока остановился на таком вот сценарии, он у меня живет в ~/bin и вызывается по нажатию клавиши PrintScreen:
#!/bin/sh
# Скрипт использует программы:
# 1. scrot - утилита командной строки для захвата изображения экрана.
# 2. gxmessage - обеспечивает легкий способ для отображения сценариев всплывающими диалогами
# 3. gpicview - самый легкий, простой и удобный просмотрщик изображений, что я видел
# 4. curl - для загрузки файлов по одному из протоколов HTTP, HTTPS или FTP.
# 5. xsel - манипуляции с выделением, например, в буфер обмена положить текст.
# Сначала создаётся отдельный каталог для снимков, сделанных сегодня.
# Создаётся только в том случае, если его ещё нет.
DIR=~/images/screenshots/`date +%Y.%m.%d`
if < ! -d $DIR >; then mkdir $DIR; fi
#Определяется имя файла для скриншота
file=$DIR"/`date '+%d-%m%y-%N'`".jpg;
#Создаётся снимок экрана
#Смотрите man scrot, у него есть интересные опции ;-)
scrot -q 95 "$file";
#Выводится на экран окошко с вопросом и вариантами ответа
gxmessage -title "Сделан снимок экрана" -center -buttons "Открыть:1,В Интернет:2,Удалить:3" "Что следует сделать с изображением?";
exitcode=$?;
#Указывается, что нужно сделать в случае нажатия определённой кнопки
case "$exitcode" in
#Открыть:1 - Открыть сделанный снимок в программе-просмотрщике картинок
<1> ) gpicview "$file";;
#В Интернет:2 - Заливка изображения на хостинг картинок
<2> )
LINK=`curl --silent -F "image"=@"$file" -F "key"="5d317f0bee23b282473522e1aa68f621" http://imgur.com/api/upload.xml | grep -Eo 'http://i.imgur.com/+.+' | head -1`;
#Удаление локальной копии
rm "$file";
#Кладём ссылку в буфер обмена
echo "$LINK" | xsel -b -i;
#Выводим окошко, чтобы стало ясно, что работа скрипта закончена
gxmessage -title "Готово!" -center "Ссылка <$LINK> сохранена в буфер обмена";;
#Удалить:3 - Удалить сделанный снимок
<3> ) rm "$file";;
esac
возможно сделаю собственный image-хостинг и более удобный интерфейс.
Какую колоду карт, русскую (Т, К, Д и В) или американскую (A, K, Q, J) ожидать в вашем блекджеке?
а зачем так сложно?
вешаем на хоткей и радуемся О_0
scrot '%Y-%m-%d_shot.png' -e 'mv $f ~/Dropbox/Public/;echo -n "http://dl.dropbox.com/u/9999999/"$n | xsel -b -i'
вешаем на хоткей и радуемся О_0
я предпочитаю кроссплатформенные решения, т.к. сам использую несколько систем
Прошу пардона за оффтоп, но как в ДропБоксе сделать папку публичной? Контекстное меню в веб-клиенте соответвующего пункта не содержит ):
Ложи в папку Public. Она расшаривается, ссылку брать в веб-интерфейсе дропбокса.
Угу, только что перечитал пост и увидел нужные строки ):
PS Всё же, "клади" (:
PS Всё же, "клади" (: