Shutter
Shutter (ранее GScrot) - это один из самых прогрессивных инструментов для создания снимков экрана для Linux. В нём есть функции захвата выделенной области, окна, всего экрана, а также веб-страницы. Работа с изображениями организована на вкладках, имеются базовый редактор изображений и возможность загрузки на различные сайты. Этот инструмент должен быть на панели Gnome у каждого, кто пишет веб-обзоры.
Shutter будет включён в выходящую в октябре Ubuntu 9.10. Пока же пакеты для версий с 7.10 по 9.04 можно скачать по адресу: http://url.fullcirclemagazine.org/997643 .
Desktop Data Manager
Desktop Data Manager - это больше, чем просто программа для создания снимков экрана, это приложение с поддержкой контекстного буфера обмена и множеством возможностей. Можно делать снимки окна, рабочего стола или выделенной области. Также можно быстро преобразовать URL в изображение. Лучше всего то, что Desktop Data Manager автоматически помещает изображение в буфер обмена, существенно облегчая вставку в рабочий документ.
Как и Shutter, DDM (пока) нет в репозиториях Ubuntu. Чтобы установить программу, следуйте инструкциям: http://url.fullcirclemagazine.org/76cc9e .
scrot
scrot (SCReenshOT) уже много лет считается одним из самых мощных инструментов для создания снимков экрана для Linux. Программа работает из командной строки и поддерживает все стандартные возможности: задержки, выбор области захвата и даже захват с нескольких экранов. Множество Linux-программ для создания снимков экрана, включая Shutter, основаны на scrot. Даже спустя десять лет он не сдаёт позиций.
Чтобы установить scrot, воспользуйтесь пакетом scrot из репозитория "universe".
ImageMagick import
Если вы знакомы с Linux достаточно долго, вы, возможно, слышали о ImageMagick - наборе инструментов для работы с изображениями. Один из его компонентов, import, - это небольшой инструмент, который импортирует экраны X-сервера в файлы изображений. import, конечно, имеет все стандартные возможности, а также содержит мощные инструменты обработки изображений благодаря его интеграции с ImageMagick. Так что вы можете менять контраст, назначать метки, делать изображение одноцветным, изменять размеры, всё одной и той же командой.
Чтобы установить ImageMagick, воспользуйтесь пакетом imagemagick.
Screengrab
https://addons.mozilla.org/en-US/firefox/addon/1146
Для некоторых веб-разработчиков функций scrot или import может быть недостаточно, а Shutter или DDM - это слишком для простого снимка сайта. Решение? Screengrab, мощное расширение Firefox. Он преобразует веб-сайты в изображения. К тому же он сохраняет всё в точности так, как вы видите на экране, поэтому, если на сайте есть Flash или Java, они будут включены в снимок. Можно выбрать окно, всю страницу, выделение или фреймы.
Установить Screengrab можно с его домашней страницы (ссылка выше), вам нужен лишь установленный Firefox.
В этой заметке хочу увековечить свой велосипед, который я изобрёл для удобного создания скриншотов. Да, я знаю о существовании таких программ как shutter, но все они по тем или иным причинам мне неудобны, а так как был интерес и время, я занялся этой проблемой.
Как работает мой велосипед
Пользователь нажимает PrintScreen, появляется меню, в котором последовательно задаются вопросы:- Сохранить весь экран или только часть (окно)?
- Сохранить файл со снимком куда-то на долгую память или сохранить в ненадёжном /tmp?
- Ввести имя файла самому, сгенерировать случайное или генерировать по шаблону?
- Если по шаблону, предлагается выбрать шаблон или ввести его самому
- Выбрать задержку в секундах перед фотографированием
- Копировать ли URL опубликованной картинки в буфер
- Показать ли диалог с путём к файлу на диске, а также URL картинки
- Уточняет имя файла (если нужно)
- Делает скриншот экрана либо ждёт, пока пользователь выделит регион или окно (man scrot)
- Если пользователь ввёл имя файла, которое уже существует, выведется подтверждение на перезапись. В случае отмены пользователю придётся самому ещё раз вызвать скрипт (сам он пока не настолько умный, чтобы спросить другое имя файла)
- В лог-файл записывается путь к сохранённому файлу и URL опубликованной картинки
- В буфер обмена копируется URL скриншота (если надо)
- Отображается диалог с путём к файлу на диске и URL опубликованной картинки (если надо)
Скрипт, вызванный без аргументов, будет каждый раз спрашивать вопросы заново. Однако, запомнив ответы пользователя, он их кеширует и записывает в файл (по умолчанию /tmp/screenshot.cache.sh). Если запустить скрипт с аргументом cached , скрипт попытается считать кешированные ответы, и если это удастся, задавать вопросы не будет.
Таким образом, настроив PrintScreen на вызов скрипта с загрузкой кеша, а Win+PrintScreen на вызов без загрузки кеша, я всегда могу изменить настройки, заново ответив на вопросы, после чего фотографировать дальше значительно быстрее.
Disclaimer
Мой дистрибутив ArchLinux, и я пользуюсь openbox в качестве оконного менеджера. У счастливых обладателей KDE/Gnome/Xfce/ваш_вариант процесс установки и использования может отличаться.Строительные материалы
- dmenu (показывать меню)
- scrot (скриншотер)
- zenity (спрашивать вопросы у пользователя)
- xclip (копировать ссылку в буфер обмена)
- imagepaste (заливать картинку на image hosting)
- скрипт (собрать все компоненты воедино)
- terminus-font (шрифты в меню, optional)
Пошаговая инструкция
Вот как выглядела бы установка он начала до конца в моём дистрибутиве.Установим стандартные пакеты:
$ pacman -S dmenu scrot zenity xclip terminus-font
Сообщим Иксам путь к этим шрифтам (плюс, хорошо бы прописать эту команду в ~/.xinitrc):
$ xset +fp /usr/share/fonts/local/
Считаем, что imagepaste (или аналог) уже установлен, поэтому пропускаем этот шаг.
Устанавливаем скрипт:
$ mkdir ~/bin $ cd !$ $ wget https://bitbucket.org/balta2ar/screenshot/raw/45ad932db13b/screenshot.sh $ chmod u+x ./screenshot.sh
Папка ~/bin у меня используется для моих наколенных поделок. В скрипте Вы, вероятно, захотите изменить:
LOG - путь к лог-файлу
FONT - шрифт меню
IMAGEPASTE_CMD - команда для публикации картинки
BASEDIR - базовая директория для тех скриншотов, которые вы захотите сохранять
Не забудьте создать лог-файл:
$ touch /var/log/screenshot.log
$ sudo chown `whoami`:users !$
И последнее, это повесить вызов скрипта на горячую клавишу. Я для этого использовал возможности openbox, а именно obkey для настройки горячих клавиш. Можно, впрочем, сразу залезть в ~/.config/openbox/rc.xml и добавить:
Плюсы
- своё не пахнет
- удобно, заточено под свои нужды
- автоматическая публикация
Минусы
- установка для красноглазых
- много компонентов, а хотелось бы один и чтобы всё работало искаропки
Скрипт целиком
#!/bin/bash init() { ACTIONS="window/region,screen" ACTIONS="drop,save" ACTIONS="create random,ask,incremental pattern" ACTIONS="screenshot-%05d.png" ACTIONS="0,5,10,30,60" ACTIONS="yes,no" ACTIONS="no,yes" PROMPT="Capture region" PROMPT="Picture file" PROMPT="File name" PROMPT="File name pattern" PROMPT="Delay" PROMPT="Copy to clipboard" PROMPT="Show links in a dialog" IND_CAPTURE_REGION=0 IND_FILESAVE=1 IND_FILENAME=2 IND_PATTERN=3 IND_DELAY=4 IND_COPY_CLIPBOARD=5 IND_SHOW_LINKS=6 LOG="/var/log/screenshot.log" FONT="-xos4-terminus-*-*-*-*-16-*-*-*-*-*-*-*" DMENU="dmenu -fn $FONT" IMAGEPASTE_CMD="imp" SCREENSHOT_CMD="scrot" SCREENSHOT_OPTIONS= OPTIONS= COUNT=${#ACTIONS[*]} BASEDIR="/home/`whoami`/pic/screenshot/scrot" CACHE="/tmp/screenshot.cache.sh" PATTERN_INDEX=0 } load_cache() { source $CACHE } save_cache() { echo -n > $CACHE for ((i = 0; i < ${#OPTIONS[*]}; i++)) do echo "OPTIONS[$i]=\"${OPTIONS[$i]}\"" >> $CACHE done echo "PATTERN_INDEX=\"$PATTERN_INDEX\"" >> $CACHE } random_filename() { TMP=`mktemp --suffix=.scrot` BASE=`basename $TMP` FILENAME="$BASEDIR/$BASE.png" } ask_filename() { FILENAME=`zenity --entry --text "Enter filename" --entry-text "$BASEDIR/"` } set_next_pattern_filename() { FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) while [ -e "$FILENAME" ]; do FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) done } ask_options() { for i in $(seq 0 $(($COUNT - 1))) do # if we are about to ask patern and # it wasn"t the choise in prev question, continue if [ "$i" -eq "$IND_PATTERN" -a "${OPTIONS[$IND_FILENAME]}" != "incremental pattern" ] then continue fi OP=`echo ${ACTIONS[$i]} | tr "," "\n" | $DMENU -p "${PROMPT[$i]}"` if [ ! -n "$OP" ]; then exit 0 fi OPTIONS[$i]=$OP done } parse_options() { # parse options and ask user questions, if any ITEM=${OPTIONS[$IND_CAPTURE_REGION]} case "$ITEM" in window/region) SCREENSHOT_OPTIONS="-b -s" ;; screen) ;; esac ITEM=${OPTIONS[$IND_FILESAVE]} case "$ITEM" in save) # Dont touch BASEDIR ;; drop) BASEDIR="/tmp" ;; esac ITEM=${OPTIONS[$IND_FILENAME]} case "$ITEM" in ask) ask_filename ;; "create random") random_filename ;; "incremental pattern") set_next_pattern_filename ;; esac ITEM=${OPTIONS[$IND_DELAY]} SCREENSHOT_OPTIONS="$SCREENSHOT_OPTIONS -d $ITEM" } check_existence() { if [ -e "$FILENAME" ] then zenity --question --text "File already exists. Overwrite?" OVERWRITE=$? if [ $OVERWRITE -ne 0 ] then exit 1 fi fi } do_screenshot() { rm -f "$FILENAME" mkdir -p `dirname "$FILENAME"` $SCREENSHOT_CMD $SCREENSHOT_OPTIONS "$FILENAME" CMD="$IMAGEPASTE_CMD $FILENAME" URL="`$CMD`" echo "$FILENAME -> $URL" >> $LOG } copy_to_clipboard() { if [ ${OPTIONS[$IND_COPY_CLIPBOARD]} == "yes" ] then echo "$URL" | xclip -selection primary echo "$URL" | xclip -selection clipboard fi } show_links() { if [ ${OPTIONS[$IND_SHOW_LINKS]} == "yes" ] then zenity --info --no-wrap --text "$FILENAME\n$URL" fi } init if [ -e "$CACHE" -a "$1" == "cached" ] then load_cache else ask_options fi save_cache parse_options check_existence do_screenshot copy_to_clipboard show_links exit 0UPD 01
: Добавлен выбор задержки: 0, 5, 10, 30, 60 секунд.
UPD 02
: Добавлено: 1) кеширование ответов пользователя 2) возможность указать инкрементальный паттерн для имени файла.
Инструкция
Первым делом необходимо установить программу Shutter. Сделать это можно с помощью программы "Центр приложений Ubuntu". Просто введите в поиске ключевое слово Shutter и нажмите кнопку установить.
После завершения установки программы запустите ее из главного меню. Вы так же можете воспользоваться поиском по меню, введя ключевое слово Shutter. После запуска в области уведомлений должен появиться значок программы. А также главное окно программы.
Чтобы сделать скриншот, используйте инструменты на панели в главном окне программы. Вы можете делать скриншот выделенной области, рабочего стола, всего экрана, одного окна и даже одного элемента окна. У программы богатые настройки, но и с настройками по умолчанию она полностью готова к использованию по назначению. Эти же инструменты дублируются в выпадающем меню, если кликнуть по иконке программы в области уведомлений, что очень удобно для быстрого создания скриншотов.
Полученные снимки экрана можно тут же отредактировать прямо в программе. Для этого используйте иконку с палитрой художника. После клика по ней откроется простой редактор, похожий на Paint, в котором можно обрезать лишнее, и выделить рамками нужные области, оставить текстовые подписи и так далее.
Все скриншоты автоматически сохраняются в файлы. По умолчанию в папку Изображения в вашей домашней папке. Вы можете скопировать и вставить скриншот в текстовый редактор прямо из программы, используя стандартные сочетания клавиш Ctrl+C, Ctrl+V. Так же можно непосредственно из Shutter совершать любые файловые операции со скриншотом. Например переместить в нужную папку, перейти в папку скриншота, загрузить на ftp или один из множества сервисов для хранения картинок.
В этой заметке хочу увековечить свой велосипед, который я изобрёл для удобного создания скриншотов. Да, я знаю о существовании таких программ как shutter, но все они по тем или иным причинам мне неудобны, а так как был интерес и время, я занялся этой проблемой.
Как работает мой велосипед
Пользователь нажимает PrintScreen, появляется меню, в котором последовательно задаются вопросы:- Сохранить весь экран или только часть (окно)?
- Сохранить файл со снимком куда-то на долгую память или сохранить в ненадёжном /tmp?
- Ввести имя файла самому, сгенерировать случайное или генерировать по шаблону?
- Если по шаблону, предлагается выбрать шаблон или ввести его самому
- Выбрать задержку в секундах перед фотографированием
- Копировать ли URL опубликованной картинки в буфер
- Показать ли диалог с путём к файлу на диске, а также URL картинки
- Уточняет имя файла (если нужно)
- Делает скриншот экрана либо ждёт, пока пользователь выделит регион или окно (man scrot)
- Если пользователь ввёл имя файла, которое уже существует, выведется подтверждение на перезапись. В случае отмены пользователю придётся самому ещё раз вызвать скрипт (сам он пока не настолько умный, чтобы спросить другое имя файла)
- В лог-файл записывается путь к сохранённому файлу и URL опубликованной картинки
- В буфер обмена копируется URL скриншота (если надо)
- Отображается диалог с путём к файлу на диске и URL опубликованной картинки (если надо)
Скрипт, вызванный без аргументов, будет каждый раз спрашивать вопросы заново. Однако, запомнив ответы пользователя, он их кеширует и записывает в файл (по умолчанию /tmp/screenshot.cache.sh). Если запустить скрипт с аргументом cached , скрипт попытается считать кешированные ответы, и если это удастся, задавать вопросы не будет.
Таким образом, настроив PrintScreen на вызов скрипта с загрузкой кеша, а Win+PrintScreen на вызов без загрузки кеша, я всегда могу изменить настройки, заново ответив на вопросы, после чего фотографировать дальше значительно быстрее.
Disclaimer
Мой дистрибутив ArchLinux, и я пользуюсь openbox в качестве оконного менеджера. У счастливых обладателей KDE/Gnome/Xfce/ваш_вариант процесс установки и использования может отличаться.Строительные материалы
- dmenu (показывать меню)
- scrot (скриншотер)
- zenity (спрашивать вопросы у пользователя)
- xclip (копировать ссылку в буфер обмена)
- imagepaste (заливать картинку на image hosting)
- скрипт (собрать все компоненты воедино)
- terminus-font (шрифты в меню, optional)
Пошаговая инструкция
Вот как выглядела бы установка он начала до конца в моём дистрибутиве.Установим стандартные пакеты:
$ pacman -S dmenu scrot zenity xclip terminus-font
Сообщим Иксам путь к этим шрифтам (плюс, хорошо бы прописать эту команду в ~/.xinitrc):
$ xset +fp /usr/share/fonts/local/
Считаем, что imagepaste (или аналог) уже установлен, поэтому пропускаем этот шаг.
Устанавливаем скрипт:
$ mkdir ~/bin $ cd !$ $ wget https://bitbucket.org/balta2ar/screenshot/raw/45ad932db13b/screenshot.sh $ chmod u+x ./screenshot.sh
Папка ~/bin у меня используется для моих наколенных поделок. В скрипте Вы, вероятно, захотите изменить:
LOG - путь к лог-файлу
FONT - шрифт меню
IMAGEPASTE_CMD - команда для публикации картинки
BASEDIR - базовая директория для тех скриншотов, которые вы захотите сохранять
Не забудьте создать лог-файл:
$ touch /var/log/screenshot.log
$ sudo chown `whoami`:users !$
И последнее, это повесить вызов скрипта на горячую клавишу. Я для этого использовал возможности openbox, а именно obkey для настройки горячих клавиш. Можно, впрочем, сразу залезть в ~/.config/openbox/rc.xml и добавить:
Плюсы
- своё не пахнет
- удобно, заточено под свои нужды
- автоматическая публикация
Минусы
- установка для красноглазых
- много компонентов, а хотелось бы один и чтобы всё работало искаропки
Скрипт целиком
#!/bin/bash init() { ACTIONS="window/region,screen" ACTIONS="drop,save" ACTIONS="create random,ask,incremental pattern" ACTIONS="screenshot-%05d.png" ACTIONS="0,5,10,30,60" ACTIONS="yes,no" ACTIONS="no,yes" PROMPT="Capture region" PROMPT="Picture file" PROMPT="File name" PROMPT="File name pattern" PROMPT="Delay" PROMPT="Copy to clipboard" PROMPT="Show links in a dialog" IND_CAPTURE_REGION=0 IND_FILESAVE=1 IND_FILENAME=2 IND_PATTERN=3 IND_DELAY=4 IND_COPY_CLIPBOARD=5 IND_SHOW_LINKS=6 LOG="/var/log/screenshot.log" FONT="-xos4-terminus-*-*-*-*-16-*-*-*-*-*-*-*" DMENU="dmenu -fn $FONT" IMAGEPASTE_CMD="imp" SCREENSHOT_CMD="scrot" SCREENSHOT_OPTIONS= OPTIONS= COUNT=${#ACTIONS[*]} BASEDIR="/home/`whoami`/pic/screenshot/scrot" CACHE="/tmp/screenshot.cache.sh" PATTERN_INDEX=0 } load_cache() { source $CACHE } save_cache() { echo -n > $CACHE for ((i = 0; i < ${#OPTIONS[*]}; i++)) do echo "OPTIONS[$i]=\"${OPTIONS[$i]}\"" >> $CACHE done echo "PATTERN_INDEX=\"$PATTERN_INDEX\"" >> $CACHE } random_filename() { TMP=`mktemp --suffix=.scrot` BASE=`basename $TMP` FILENAME="$BASEDIR/$BASE.png" } ask_filename() { FILENAME=`zenity --entry --text "Enter filename" --entry-text "$BASEDIR/"` } set_next_pattern_filename() { FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) while [ -e "$FILENAME" ]; do FILENAME="$BASEDIR/$(printf ${OPTIONS[$IND_PATTERN]} $PATTERN_INDEX)" PATTERN_INDEX=$(($PATTERN_INDEX + 1)) done } ask_options() { for i in $(seq 0 $(($COUNT - 1))) do # if we are about to ask patern and # it wasn"t the choise in prev question, continue if [ "$i" -eq "$IND_PATTERN" -a "${OPTIONS[$IND_FILENAME]}" != "incremental pattern" ] then continue fi OP=`echo ${ACTIONS[$i]} | tr "," "\n" | $DMENU -p "${PROMPT[$i]}"` if [ ! -n "$OP" ]; then exit 0 fi OPTIONS[$i]=$OP done } parse_options() { # parse options and ask user questions, if any ITEM=${OPTIONS[$IND_CAPTURE_REGION]} case "$ITEM" in window/region) SCREENSHOT_OPTIONS="-b -s" ;; screen) ;; esac ITEM=${OPTIONS[$IND_FILESAVE]} case "$ITEM" in save) # Dont touch BASEDIR ;; drop) BASEDIR="/tmp" ;; esac ITEM=${OPTIONS[$IND_FILENAME]} case "$ITEM" in ask) ask_filename ;; "create random") random_filename ;; "incremental pattern") set_next_pattern_filename ;; esac ITEM=${OPTIONS[$IND_DELAY]} SCREENSHOT_OPTIONS="$SCREENSHOT_OPTIONS -d $ITEM" } check_existence() { if [ -e "$FILENAME" ] then zenity --question --text "File already exists. Overwrite?" OVERWRITE=$? if [ $OVERWRITE -ne 0 ] then exit 1 fi fi } do_screenshot() { rm -f "$FILENAME" mkdir -p `dirname "$FILENAME"` $SCREENSHOT_CMD $SCREENSHOT_OPTIONS "$FILENAME" CMD="$IMAGEPASTE_CMD $FILENAME" URL="`$CMD`" echo "$FILENAME -> $URL" >> $LOG } copy_to_clipboard() { if [ ${OPTIONS[$IND_COPY_CLIPBOARD]} == "yes" ] then echo "$URL" | xclip -selection primary echo "$URL" | xclip -selection clipboard fi } show_links() { if [ ${OPTIONS[$IND_SHOW_LINKS]} == "yes" ] then zenity --info --no-wrap --text "$FILENAME\n$URL" fi } init if [ -e "$CACHE" -a "$1" == "cached" ] then load_cache else ask_options fi save_cache parse_options check_existence do_screenshot copy_to_clipboard show_links exit 0UPD 01
: Добавлен выбор задержки: 0, 5, 10, 30, 60 секунд.
UPD 02
: Добавлено: 1) кеширование ответов пользователя 2) возможность указать инкрементальный паттерн для имени файла.