我正在尝试对以下内容进行逆向工程:
xwd -silent | convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:-
我知道最终这个序列将决定屏幕坐标的 rgb 值。
我知道这xwd
需要进行屏幕转储并将其传输到转换命令。
我以前从未见过类似xwd:-
and 的东西。and的作用txt:-
是什么?你能给出一个关于此 bash 语法的更多信息的链接吗?xwd:-
txt:-
谢谢
答案1
xwd:- 和 txt:- 有什么作用?您能给出一个关于此 bash 语法的更多信息的链接吗?
需要澄清的是,不是bash 语法。这些是 convert 语法的一部分。
xwd:-
告诉convert
从 stdin 获取输入,其中-
表示 stdin,并期望输入xwd
格式为。
txt:-
告诉convert
将其输出发送到 stdout,其中-
表示 stdout,并以格式发送输出txt
。
更多详情
xwd -silent
这将捕获 X 窗口作为图像,并以 XWD 格式将该输出发送到标准输出。默认情况下,
xwd
当窗口捕获开始和结束时会响铃。-silent
让它安静下来。convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:-
这使用了 ImageMagick 的
convert
实用程序。xwd:-
告诉它在标准输入上接受 XWD 格式的图像。告诉 它将-depth 8
图像转换为深度 8。-crop "1x1+$X+$Y"
告诉它将图像裁剪为位置处的单个像素X
。告诉它以文本形式将有关该像素的信息发送到标准输出。Y
txt:-
为了理解txt
输出,我们来看一个例子。以下是将图像裁剪为 2 x 2 像素大小的输出:
$ xwd -silent | convert xwd:- -depth 8 -crop "2x2+200+200" txt:-
# ImageMagick pixel enumeration: 2,2,255,srgb
0,0: (255,255,255) #FFFFFF white
1,0: (255,255,255) #FFFFFF white
0,1: (255,255,255) #FFFFFF white
1,1: (255,255,255) #FFFFFF white
如您所见,每个像素都通过其在裁剪图像中的位置、两种格式的 RGB 颜色以及(如果有)颜色的通用名称来识别。
更多示例
可以使用类似的语法将 jpeg 文件转换为 png:
cat out.jpg | convert jpg:- png:- >out.png
当然,在这个简单的例子中,管道是多余的。上面的代码可以简化为:
convert jpg:out.jpg png:out.png
此外,如果未指定文件格式,convert
则会根据文件扩展名进行猜测。因此,对于具有可识别文件扩展名的文件,以下方法也有效:
convert out.jpg out.png
文档
不带参数运行convert
会产生帮助消息。帮助消息的末尾解释了xwd:-
和的含义txt:-
:
默认情况下,“file”的图像格式由其魔数决定。要指定特定的图像格式,请在文件名前加上图像格式名称和冒号(即 ps:image)或将图像类型指定为文件名后缀(即 image.ps)。对于标准输入或输出,将“file”指定为“-”。