屏幕上有图像,我想测量其宽度。当然,我可以使用尺子,但是这太古怪而缓慢。有什么地方可以单击快捷键,将其拖出一个区域,它会告诉我该区域的高度和宽度吗?
与Google Chrome的Page Ruler类似。
当前,我正在使用Shift+ PrtScn并拖出该区域,保存图像,然后进入“属性”以找出其高度和宽度。
屏幕上有图像,我想测量其宽度。当然,我可以使用尺子,但是这太古怪而缓慢。有什么地方可以单击快捷键,将其拖出一个区域,它会告诉我该区域的高度和宽度吗?
与Google Chrome的Page Ruler类似。
当前,我正在使用Shift+ PrtScn并拖出该区域,保存图像,然后进入“属性”以找出其高度和宽度。
Answers:
如果尚未安装Shutter,请先安装它。
sudo apt-get install shutter
在编辑->首选项下打开首选项,然后选择行为选项卡。
选中“登录时启动快门”和“首次启动时隐藏窗口”。请参见下面的屏幕截图:
下面的脚本测量鼠标指针两个位置之间的区域大小。
它的工作方式如下:
将鼠标指针放在第一个位置(无需单击)
按下您选择的组合键(请参阅下文)
将鼠标放在第二个位置(再次单击不放)
再次按您的组合键。通知会告诉您该区域的确切大小(px)。
您可以选择(通过取消注释其中一条)注释您希望收到通知的方式;通过通知:
或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
安装的情况下运行脚本)Popen(['/bin/bash',...
而不是Popen(['zenity', '--info', ...
?
command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)
需要大量用更少的插科打诨'
和"
,我想。
xdotools
吗?像check_output(['xdotools', 'getmouseposition'])
什么?
使用污泥
确定选择区域的另一种简单方法是使用slop
(选择操作),这是一种命令行实用程序,“它向用户查询选择内容并将其打印到标准输出”。
slop
是一个相对较新的工具,尚未针对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
),将选择边框设置为1px(-b 1
)eval $(...)
-将输出读slop
入变量notify-send ...
-发送带有选定区域信息的GUI通知echo ${W}x${H} | xsel -bi
-将尺寸复制到剪贴板(需要xsel
→ sudo apt-get install xsel
)