Posts in category ImageMagick

Linux 下定期屏幕截屏脚本(补 20111120)

原文来自 https://code.google.com/p/thinkbasenet/wiki/20111120_ScreenRecorderShellInLinux

概述

在上一篇 Windows 和 Linux 下定期屏幕截屏的方法 中提到了可以使用 ImageMagickimport 命令完成截屏过程, 本文基于 import 命令, 提供两个脚本, 分别用于定期截取当前活动窗口, 以及定期截取指定窗口;

脚本

主要技术说明

import 命令

  • -screen 参数: 不了解 X 的细节, 猜测对于一个典型的 X 窗口, 其中的工具提示、菜单等其实是有独立的 window id 的, 那么在指定 window id 截屏时, 可能是截取不到这些内容的, 使用 -screen 参数可以解决这个问题:
    • 没有 -screen 参数时的内容:
    • 加上 -screen 参数:

取得窗口的 window id 和 process id

  1. 获取当前活动窗口的 window id:
    • xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5
  2. 使用 xwininfo 选择一个窗口并获取其 window id:
    • xwininfo | grep "xwininfo: Window id:" | cut -d ' ' -f 4
  3. 获取窗口($WIN_ID)对应的进程 ID:
    • xprop -id $WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3

比较截屏文件是否一致

  • 使用 cmp 命令即可.

END

Windows 和 Linux 下定期屏幕截屏的方法(补 20101114)

原文来自 https://code.google.com/p/thinkbasenet/wiki/20101114_ScreenShotAsFilesInWindowsAndLinux

截屏并存储到文件的方法, 主要是可以用于录制操作视频, 或者日志重要系统操作过程, 以及测试过程等.

简介

一直以来使用 Wink 作为屏幕录制的首选软件, 但是 Wink 存在一个很麻烦的问题, 就是在录制途中, 所有的屏幕截屏都存储在内存里, 因此在很长时间的操作中, 往往会造成内存溢出, 导致前功尽弃.

有一个想法是写一个录制屏幕并且及时存储到图片文件的软件, 最初的想法是使用 Java 来写, 但是一直都没有开始; 今天无意中看到了 nircmd 这个软件, 其中的命令 savescreenshot 可以较好的完成这个要求:

nircmdc.exe loop 1000 2000 savescreenshot c:\temp\scr~$currdate.MM_dd_yyyy$-~$currtime.HH_mm_ss$.png 

loop 1000 2000 代表循环 1000 次, 间隔时间 2 秒(2000 毫秒);

使用 nircmdc 可以保证 1000 次循环完成之前, 命令行一直停留在这个命令上, 方便不需要的时候使用 Ctrl-C 结束截屏过程;

另外还可以使用 savescreenshotwin 命令保存当前活动窗口的命令;

Linux 下的处理方法

使用 nircmdc 可以在 Windows 下实现定时截屏的要求, 但是在 Linux 下又如何实现呢? 经过一番搜索, 大致的解决方案如下:

  1. 基于 ImageMagick, 使用其 import 命令完成截屏过程, 基本语法为:
    import -window <Window ID> <FileName>.png
    
  2. 如果需要截取整个屏幕, 可以使用 root 作为 Window ID, 例如:
    import -window root MyScreenshot3.png
    
  3. 如何实现截取当前活动窗口呢? 可以使用如下命令得到当前活动窗口 ID:
    xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5
    
  4. 20111120 添加 - Linux 下定期屏幕截屏脚本;

下载

其它

  1. 减少文件大小
    • 如果屏幕内容一直不变, 那么就会出现重复录取同一个画面的情况, 应该可以通过一个脚本使用 md5sum 等命令检查两张图片是否完全一样, 删除重复内容的图片, 这样就可以实现减少文件大小的目的了.

参考资料

  1. http://tips.webdesign10.com/how-to-take-a-screenshot-on-ubuntu-linux
    • "How to Take a Screenshot in Linux (Ubuntu)", 描述了在 Ubuntu 上几种截屏的方法;
  2. http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html
    • "我的ImageMagick使用心得", ImageMagick 的中文介绍;
  3. http://www.ruby-forum.com/topic/165740#728314
    • "Title from current active window", Ruby-Gnome 2 论坛的讨论;

END