Pull to refresh

Свой сервис обмена скриншотами (на коленке за 20 минут)

Reading time 3 min
Views 5.2K
Добрый день %habr%

Работая в JIRA/Redmine/basecamp/Wiki есть, ставший привычным, способ вставки изображения: !http://blah.com/img.png! Но бесплатные сервисы, в той или иной степени, не дают возможности работать эффективно.

Clip2net, например, не дает прямой ссылки на файл, а на выкорчевывание ее из страницы уходит время, если в таске 20 скринов и для каждого нужен URL…

Gyazo на бесплатном аккаунте ограничен по времени использования, URL приходится модифицировать дописывая ".png" в конце, картинки имеют ограниченный срок хранения, а реклама gyazo за которой уже сложно найти сам скрин — это нЕчто.

На мысль использовать Dropbox натолкнул этот комментарий. Идея мне показалось интересной и я засел за свой велосипед. DIY реализация «сервиса» и клиентской части, со своими плюсами и минусами, под катом.



Требования


  • Запуск по горячей клавише
  • Выбор произвольной области
  • Имя файла (подобно gyazo) в виде MD5 хеша
  • Прямая ссылка на файл в буфере обмена
  • Формат изображения PNG
  • Возможность изменять настройки

Логика


  • Системный hook для горячей клавиши
  • Запустить приложение для снятия скриншота
  • Отметить область
  • Получить MD5 hash текущего timestamp
  • Сохранить файл в публичную папку Dropbox
  • Положить ссылку на файл в буфер обмена

Инструменты


  • Dropbox — известный сервис хранения и синхронизации файлов
  • autoit — инструмент автоматизации выполнения задач в Windows
  • MiniCap — приложение для создания скриншотов (понимает командную строку)

Настройка осуществляется через правку config.ini в каталоге с программой:
config.ini
[MAIN]
; куда сохранять файлы скринов
DBOX_DIR = "C:\Dropbox\Public\pic\"

; путь до приложения создающего скриншоты
CAP = "C:\Program Files\MiniCap\MiniCap.exe"

; часть внешнй ссылки (можно получить на странице Dropbox)
; пример http://dl.dropbox.com/u/2058666/pic/1c40b047e22875c8396b029b00ea9a14.png
DBOX_URL = "http://dl.dropbox.com/u/2058666/pic/"

; hotkey по которому делаем скриншот
shoot_key = "{PRINTSCREEN}"


Собственно, скрипт AutoIT:
BoxShoot.au3
#include  <Crypt.au3>

$hotkey 	= IniRead("config.ini", "MAIN", "shoot_key", "NotFound")
$DBOX_DIR 	= IniRead("config.ini", "MAIN", "DBOX_DIR", "NotFound")
$DBOX_URL 	= IniRead("config.ini", "MAIN", "DBOX_URL", "NotFound")
$CAP 		= IniRead("config.ini", "MAIN", "CAP", "NotFound")

HotKeySet ( $hotkey, "SHOOT" )

TraySetToolTip("BoxShoot")
Opt("TrayMenuMode", 1)
$exititem = TrayCreateItem("Exit")
TraySetState()

While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = 0
            ContinueLoop
        Case $msg = $exititem
            CLOSE()
    EndSelect
WEnd

Func SHOOT()
	$CurTime = @YEAR & "_" & @MON & "_" & @MDAY & "_" & @HOUR & "_" & @MIN & "_" & @SEC
	$hash = _Crypt_HashData($CurTime, $CALG_MD5)
	$result = StringTrimLeft($hash, 2)
	$fname = $result & ".png"
	$fname = StringLower($fname) 

	Run($CAP & " -captureregselect -exit -compress 7 -bordershadow -noaero -save " & $DBOX_DIR & $fname , "", @SW_MINIMIZE)

	ClipPut($DBOX_URL & $fname)
EndFunc

Func CLOSE()
	Exit 0
EndFunc

После запуска, программа висит в трее, ждет нажатия PrintScreen.

Занимает в памяти 1.5мб

Авто запуск — в ручном режиме, то-есть через создания ярлычка в «Пуск — Автозагрузка»


Статистика



Файлов: ~400
Объем: ~17mb
Пользуюсь с 31 октября

Меня устраивает почти полностью, ссылки выглядят не очень красиво, подумываю прикрутить URL shortener.

Bonus


Используя scrot, xclip и немного Bash скриптинга — можно легко получить аналог для любимого *nix:
#!/bin/bash

F_NAME=`date +%s | md5sum | awk '{ print $1}'`'.png'
DBOX_DIR='/home/username/Dropbox/Public/pic/'
DBOX_URL='http://dl.dropbox.com/u/2058666/pic/'
S_NAME=$DBOX_DIR$F_NAME

scrot -s -q 0 $S_NAME
echo -n $DBOX_URL$F_NAME | xclip

Осталось XBindKeys прикрутить.

Исходный код и готовые exe доступны на GitHub

PS


DropBox ID изменен в целях безопасности, приношу свои извинения бедолаге, чей ID фигурирует в скриптах.
Tags:
Hubs:
+19
Comments 33
Comments Comments 33

Articles