У меня есть изображение на экране, и я хочу измерить его ширину. Конечно, я могу использовать линейку, но это причудливо и медленно. Есть ли что-то, где я могу нажать сочетание клавиш, вытащить область, и это скажет мне высоту и ширину той области?
Что-то подобное Линейке Страницы для Google Chrome.
В настоящее время я использую Сдвиг + PrtScn и вытаскиваю область, сохраняю образ и затем вхожу в Свойства для обнаружения его высоты и ширины.
Первая установка Затвор , если Вам не установили его.
sudo apt-get install shutter
Открывают предпочтения при Редактировании-> Предпочтения и выбирают вкладку поведения.
Проверка 'Запускают затвор при входе в систему' и 'Окне Hide на первом запуске'. См. снимок экрана ниже:
Сценарий ниже измеряет размер области между двумя местами указателя мыши.
Это работает, как следует:
Поместите указатель мыши в первое положение (не нажимая)
Нажмите сочетание клавиш по Вашему выбору (см. далее ниже),
Поместите мышь во второе положение (снова, не нажимая)
Нажмите свое сочетание клавиш снова. Уведомление скажет Вам точный размер (пкс) области.
Можно выбрать (путем некомментария одной из строк), как требуется быть уведомленными; любой уведомлением:
Или окно информации о Zenity:
(Примеры из различных областей),
Использование сценария xdotool
:
sudo apt-get install xdotool
Скопируйте сценарий ниже в пустой файл, не прокомментируйте любую из строк:
command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
(чтобы быть уведомленным notify-send
опция)
или:
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
для Zenity
опция.
Сохраните сценарий в ~/bin
(необходимо будет, вероятно, создать каталог), как measure_area
(никакое расширение), и делают это исполняемым файлом.
Добавьте сочетание клавиш по Вашему выбору для запущения скрипта: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
measure_area
#!/usr/bin/env python3
import subprocess
import os
import math
home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"
def get_pos():
pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
return [m[2:] for m in pos_data.split()[:2]]
def confirm():
get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
br_data = float(get[get.index("Brightness:")+1])
brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
flash = ["sleep", "0.1"]
for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
subprocess.call(cmd)
if not os.path.exists(area):
with open(area, "wt") as measure:
measure.write(str(get_pos()))
confirm()
else:
second = get_pos()
with open(area) as first_m:
try:
first = eval(first_m.read())
w = int(math.fabs(int(second[0]) - int(first[0])))
h = int(math.fabs(int(second[1]) - int(first[1])))
#--- uncomment either one of the lines below:
# command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
#---
confirm()
except SyntaxError:
text = "Please try again, there was an error in the data"
command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
subprocess.Popen(command)
os.remove(area)
Когда сценарий называют в первый раз, когда это получает текущее положение мыши с xdotool
команда:
xdotool getmouselocation
Это затем сохраняет положение в (невидимый) файл .measure_area.txt
, ожидание второго вызова.
На втором вызове это читает файл, удаляет его и сравнивает сохраненный x/y
координаты к последним, и вычисляют размер области между ними.
Обновленный сценарий со многими улучшениями:
subprocess.Popen()
/subprocess.check_output()
команды (благодаря @muru, @Trengot)xdotool
установленный)Используя помои
Другой простой способ определить область выбора при помощи slop
(Выберите Операцию), утилита командной строки, "которая запрашивает для выбора от пользователя и печатает регион к stdout".
slop
comparitively новый инструмент и не был упакован для Debian/Ubuntu, еще.как есть Необходимо будет скомпилировать его из источника:
sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install
Установка является самой трудной частью. slop
самостоятельно на самом деле очень легко работать с. Например, следующая острота предложит Вам выбирать экранную область и и отобразит результат как уведомление и запишет это в буфер обмена:
eval $(slop -t 0 -b 1) && notify-send "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi
Снимок экрана:
Быстрая разбивка команд использовала:
slop -t 0 -b 1
- предложите пользователю выбирать экранную область; не выбирайте полные окна (-t 0
), граница выделения набора к 1 пкс (-b 1
)eval $(...)
- считайте вывод slop
в переменныеnotify-send ...
- отправьте уведомление GUI с информацией о выбранной областиecho ${W}x${H} | xsel -bi
- размеры копии к буферу обмена (требует xsel
→ sudo apt-get install xsel
)