试图理解 xwd:- 在 convert xwd:- 中的作用

试图理解 xwd:- 在 convert xwd:- 中的作用

我正在尝试对以下内容进行逆向工程:

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。告诉它以文本形式将有关该像素的信息发送到标准输出。Ytxt:-

为了理解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”指定为“-”。

相关内容