我想从 bash 脚本中捕获一个窗口作为 png,使用窗口的ID。在本例中,窗口是顶部面板。使用gnome-screenshot
颜色是正确的,按照此图像...(此图像与下图大小不同,因此请忽略底部的黑线)
但是,当我通过捕获面板时import
,或者 xwd
+ convert
,我得到以下图像..
为什么我会出现这种色差?
import
两者convert
都属于该imagemagick
包...
我在 Ubuntu 存储库中没有找到任何其他可以通过其捕获窗口的东西ID...所以我被困住了。 (gnome-screenshot
没有该功能)...很高兴知道这里发生了什么(例如,与透明的图像,我对此知之甚少)...但无论如何,这只是一个推荐解决方法捕获实用程序可能会成功......它必须能够通过它的ID。
这是我如何制作和查看图像捕获的示例。
import -window "$(wmctrl -l |grep "Top Expanded Edge Panel" |awk '{print $1}')" screen.png
display screen.png
答案1
对于从控制台制作屏幕,也有scrot
。由于它不是来自imagemagick
包的工具,我认为颜色有机会没问题。
有一个问题 -scrot
只能截取全屏屏幕截图,因此我们将截取全屏屏幕截图,然后剪切出我们需要的窗口区域。当然,为了剪掉它,我们不会使用imagemagick
而是使用包中的工具netpbm
。
#!/bin/bash
unset x y w h
eval $(xwininfo -id $(wmctrl -l |grep "Top Expanded Edge Panel" |awk '{print $1}') |
sed -ne "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \
-e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \
-e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \
-e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" )
scrot scrot.pnm
< scrot.pnm pnmcut -left $x -top $y -width $w -height $h | pnmtopng > scrot_cropped.png
display scrot_cropped.png
您能检查一下是否scrot
可以制作颜色不变的屏幕截图吗?如果是,该脚本应该完成工作并获取您想要的窗口屏幕......
脚本灵感来自 @fred 的答案:如何准确找到窗户尺寸和位置(包括装饰)?和@JRW:用于切片图像的 Oneliner?