Скрипт для создания скриншотов (Три клика = шот создан, выложен в Web, и его URL в клипборде)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

Скрипт для создания скриншотов

Сообщение rm_ »

По мотивам вот этой темки, после того как там посоветовали замечательную программу scrot, решил написать для себя скрипт, упрощающий наиболее частую последовательность действий, проделываемую, когда нужно сохранить скриншот и выложить в Интернете URL на него.

Скрипт действительно маленький - описание заняло, в килобайтах, гораздо больше текста, чем он сам. Но всё-таки решил расписать и выложить - вдруг кому-то ещё пригодится, а кого-нибудь натолкнёт на полезные мысли по применению такой концепции (связки скриптинга с zenity для написания "полу-GUI'шных" шелл-скриптов).

uwshot - the unix-way of making screenshots

Код: Выделить всё

#!/bin/sh

#    uwshot - the unix-way of making screenshots
#    Copyright (C) 2008 Roman Mamedov <http://rm.pp.ru/>
#
#    This program is free software: you can redistribute it and/or modify it under the terms of
#    the GNU General Public License version 3 as published by the Free Software Foundation.
#    See http://www.gnu.org/licenses/gpl-3.0.html for more details.
#
#    Notable dependencies:
#      - scrot
#      - zenity
#      - pngcrush (optional)
#
#    Usage:
#      uwshot.sh [baseurl]
#
#    Parameters:
#      baseurl - the URL under which the current directory is accessible from the Web
#
#    Version history:
#      2008-08-26, v1.0 - initial public release

BASEURL=$1
TEMPNAME=`whoami`-scrot.tmp.png
NAMEPREFIX=`date +%Y-%m-%d-%H%M-`

# First, make a screenshot and pngcrush it
scrot -b -s $TEMPNAME
pngcrush $TEMPNAME /tmp/$TEMPNAME && mv /tmp/$TEMPNAME $TEMPNAME

# Then ask for screenshot name; if cancel is pressed, delete the temp file and exit
SHOTSIZE=`du -b -h $TEMPNAME | cut -f 1`
SHOTNAME=`zenity --entry --text="Screenshot is $SHOTSIZE, enter name or press \"Cancel\" to delete"`
if [[ -z "$SHOTNAME" ]]; then
  rm $TEMPNAME;
  exit 1;
fi

# Give the screenshot its final name
SHOTNAME=$NAMEPREFIX$SHOTNAME.png
mv $TEMPNAME $SHOTNAME

if [[ -n "$BASEURL" ]]; then
  zenity --entry --text="Screenshot is $SHOTSIZE, copy-paste the URL or press \"Cancel\" to delete" --entry-text="$BASEURL$SHOTNAME" || rm $SHOTNAME
fi

Сохранить в /usr/local/bin/ как uwshot.sh, после чего в вашем GUI создать кнопку на панели быстрого запуска, или строку в менюшке, выполняющую:

Код: Выделить всё

/bin/sh -c "cd /каталог/сервера/www/ && uwshot.sh http://интернетовский-адрес-вашего-компьютера/"

Принимаю идеи по улучшению, добавлению новых фич, критику и т.д. и т.п. :)
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Скрипт для создания скриншотов

Сообщение watashiwa_daredeska »

Больно уж много телодвижений нужно для создания скриншота. Я себе сделал такой вот неинтерактивный скриптик:

Код:

#!/bin/sh win=root base=root dir="$HOME/shots" if test -n "$1"; then win=$1 shift fi if test -n "$1"; then base=$1 shift fi mkdir -p "$dir" tmpf=$(tempfile -d "$dir" -s .png) import -window "$win" -quality 95 "$@" "$tmpf" for n in $(seq 1000); do fn="${dir}/${base}${n}.png" if ln "${tmpf}" "${fn}" >/dev/null 2>&1; then rm "${tmpf}" break fi done

И прописал в ~/.fvwm/.fvwm2rc

Код: Выделить всё

Key Print   A           N   Exec screenshot root
Key Print   A           M   Exec screenshot $[w.id] $[w.class]
Key Print   A           S   Exec screenshot $[w.id] $[w.class] -frame

Теперь одним нажатием я делаю скриншот всего экрана, либо активного окна с рамкой или без рамки. Поправить dir, чтобы складывал в ~/public_html, сформировать URL, показать URL через xmessage -- тривиально. Можно и автоматическую закачку на хостинг приписать, если надо.
Спасибо сказали:
Аватара пользователя
Snupt
Бывший модератор
Сообщения: 2062
Статус: No Place for RTFM Here…
ОС: Mac OS X
Контактная информация:

Re: Скрипт для создания скриншотов

Сообщение Snupt »

Переезжаем в Проекты Нашего Форума.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Скрипт для создания скриншотов

Сообщение ZyX »

О, чего я откопал. У меня всё гораздо проще:

Код: Выделить всё

#!/bin/zsh

DIR="${HOME}/screenshots"
DATE="$(date +%Y-%m-%d@%H:%M:%S:%N)"
NAME="${DIR}/screenshot-${DATE}.png"

[[ -d "${DIR}" ]] || mkdir "${DIR}"

which import &>/dev/null || echo <<EOF
Import not found.  Is ImageMagick installed on the system?
EOF
case "$1" in
    win)  import "${NAME}";;
    scr)  import -window root "${NAME}";;
    area) import "${NAME}";;
    *) echo "Usage: $(basename $0) win|scr|area"
esac
which optipng &>/dev/null && optipng -o3 "${NAME}"
which UploadImg && UploadImg "${NAME}" >> "${DIR}/uploads"

Для того, чтобы сделать изображение текущего окна придётся на него нажать
мышкой, а так <PrintScreen> делает изображение всего экрана, а <A-PrintScreen>:
окна, на которое нажмёшь или области, которую выделишь. UploadImg загружает
скрипт на fotki.yandex.ru и выдаёт информацию о загруженном изображении
в формате JSON в STDOUT. Могу поделиться (UploadImg есть самописный
Python’овский скрипт).

Проще тут в том смысле, что если привлечь наносекунды, то не понадобится ни
нумерация и временный файл, ни даже случайное число.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: Скрипт для создания скриншотов

Сообщение eddy »

У меня самый короткий скрипт :) :

Код: Выделить всё

#!/bin/bash
import  -silent -screen $(date +/tmp/%y.%m.%d_%H:%M:%S.jpg)

"Пришпилен" к PrtScrn.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Скрипт для создания скриншотов

Сообщение ZyX »

eddy писал(а):
29.04.2010 22:58
У меня самый короткий скрипт :) :

Код: Выделить всё

#!/bin/bash
import  -silent -screen $(date +/tmp/%y.%m.%d_%H:%M:%S.jpg)

"Пришпилен" к PrtScrn.

Однако, не хватает сжатия и загрузки на хранилище изображений. Причём второе
важнее: вы же их чаще не для себя делаете?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Скрипт для создания скриншотов

Сообщение SLEDopit »

rm_ писал(а):
26.08.2008 22:27
zenity --entry --text="
watashiwa_daredeska писал(а):
27.08.2008 10:33
показать URL через xmessage
ZyX писал(а):
29.04.2010 22:34
выдаёт информацию о загруженном изображении в формате JSON в STDOUT.
да что ж такое то (:
неужели это все гораздо проще, чем сразу url загнать в буфер?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Скрипт для создания скриншотов

Сообщение ZyX »

SLEDopit писал(а):
29.04.2010 23:11
rm_ писал(а):
26.08.2008 22:27
zenity --entry --text="
watashiwa_daredeska писал(а):
27.08.2008 10:33
показать URL через xmessage
ZyX писал(а):
29.04.2010 22:34
выдаёт информацию о загруженном изображении в формате JSON в STDOUT.
да что ж такое то (:
неужели это все гораздо проще, чем сразу url загнать в буфер?

Какой? У меня их не меньше двух: preview и оригинал (+ссылка на страницу
с изображением). Если в формате preview = ссылка на оригинал, то для какого
форума? С bbcode? С урезанным html? Со своим языком разметки? А, может, мне
сейчас вообще preview не нужно?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Скрипт для создания скриншотов

Сообщение SLEDopit »

ZyX писал(а):
29.04.2010 23:28
Какой? У меня их не меньше двух: preview и оригинал (+ссылка на страницу
с изображением). Если в формате preview = ссылка на оригинал, то для какого
форума? С bbcode? С урезанным html? Со своим языком разметки? А, может, мне
сейчас вообще preview не нужно?
Я свой скрипт повесил на хоткеи и оттуда вывод сразу в буфер.
win+s = прямая ссылка
win+f = вывод в ббкоде с превью
все остальное я практически не использую и это легко можно получить из прямой ссылки. но при сильном желании можно еще пару хоткеев повесить.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

Re: Скрипт для создания скриншотов

Сообщение rm_ »

неужели это все гораздо проще, чем сразу url загнать в буфер?

Когда я этот скрипт делал, ещё не знал о возможности так вот запросто из шелл-скрипта загнать чего-то в буфер. Позже узнал, поэкспериментировал с нею, и решил, что вариант с Zenity мне всё же удобнее. Как минимум тем, что в окошке с URL отображается и размер файла (не будешь же ссылку на случайно получившийся 500-килобайтный шот давать людям). Ну и не говоря уж о том, что буфер обмена между локальной и VNC-сессией (которую я постоянно использую) зачастую глючит, особенно если речь идёт о разных операционках внутри и снаружи неё.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: Скрипт для создания скриншотов

Сообщение eddy »

ZyX писал(а):
29.04.2010 23:06
Однако, не хватает сжатия и загрузки на хранилище изображений. Причём второе
важнее: вы же их чаще не для себя делаете?

Пока не заморачивался, как загружать на тот же imageshack - это, все-таки, скриптом на баше не закончится, возможно, придется на сях что-нибудь писать. Проще уж руками. Ну а сжимать-то зачем? Полноразмерный скриншот не так уж и много места занимает, и не так уж и часто я их отправляю...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Скрипт для создания скриншотов

Сообщение SLEDopit »

eddy писал(а):
30.04.2010 01:27
это, все-таки, скриптом на баше не закончится
да ну. когда писал скрипт для загрузки на ipicture. баша хватило за глаза.
точнее curl'a (:
rm_ писал(а):
29.04.2010 23:47
Ну и не говоря уж о том, что буфер обмена между локальной и VNC-сессией
ну у меня таких проблем не возникает.
rm_ писал(а):
29.04.2010 23:47
не будешь же ссылку на случайно получившийся 500-килобайтный шот давать людям
эх, все бы были такими заботливыми. мне тут на днях товарищ один скинул 3 скрина по 5 мб каждый. в bmp. потом я его учил скриншоты делать. (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Скрипт для создания скриншотов

Сообщение watashiwa_daredeska »

SLEDopit писал(а):
29.04.2010 23:11
неужели это все гораздо проще, чем сразу url загнать в буфер?
Ровно то же самое. Для загоняния в буфер есть xclip, можно хоть в три буфера сразу загнать :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Скрипт для создания скриншотов

Сообщение drBatty »

я тоже такой скрипт хотел написать. но было лень. потому я до сих пор юзаю ksnapshot. вопрос публикации не имеет значения - просто сохраняю скрины здесь.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Скрипт для создания скриншотов

Сообщение ZyX »

Собственно, сам UploadImg: http://kp-pav.narod.ru/yafuploader.py.xz

Заменить %USER% и %PASSWORD% понятно на что. Никаких настроек, всё, что указано
в командной строке, считается именем файла, который надо закачать. Все
зависимости в начале файла.
Спасибо сказали:
Ответить