|
我们看到google,alexa 等网站,在查询结果的时候还会给你生成一个该网站的略缩图,尤其是google的桌面搜索,如果你安装google的桌面搜索你就非常明白了。
我们想象肯定有一个后台程序在监视当前机器的屏幕,所以要截取图片的同时先要学会用程序抓当前屏幕.
用java实现代码如下:
public void screen() { try { Toolkit tk = Toolkit.getDefaultToolkit(); tk.sync(); Rectangle ecran = new Rectangle(tk.getScreenSize()); Robot robot = new Robot(); robot.setAutoDelay(0); robot.setAutoWaitForIdle(false); BufferedImage image = robot.createScreenCapture(ecran); // You get a BufferedImage in TYPE_INT_BGR. File file = new File("D:/screen.jpg"); javax.imageio.ImageIO.write(image, "JPEG", file); } catch (Exception e) { e.printStackTrace(); } } |
注意是该程序运行时候最前端的屏幕.
可以捕获屏幕了,下面如何出现网站的页面呢?
我们假设后台程序可以用浏览器打开某个地址的页面。
我们用java做如下实现,假设当前系统是windows
public boolean openIExplore(String url) { String cmd = "C:/Program Files/Internet Explorer/iexplore.exe " + url; Process process = null; try { process = Runtime.getRuntime().exec(cmd); //考虑到网络因素,页面完全展开要一定的时间,所以再次停止一个时间 Thread.currentThread().sleep(30000); return true; } catch (Exception e) { return false; } }
|
把以上两个方法结合起来,用命令行来执行,执行完后把命令行最小化。 或者我们做成远程调用的方式,系统可以把当前地址保存成图片.
这里有一个问题,就是频繁打开ie窗口而没有关闭窗口的动作。 因为我们不知道ie参数中有没有一个“窗口名字”的参数,如果存在窗口名字的概念,我们可以想 JavaScript中window.open(url,windowName,args,,,,);这样就可以只开一个浏览器了。
我们还可以假设做一个二帧的页面,该页面接收一个参数就是远程地址,该页面的顶帧高度为0,也就是不显示出来框架的架构。然后该帧里面有一段javascript来定时关闭窗口,而且是强制关闭窗口。
这样即不影响抓图效果,也不影响到服务器的进程。
这个只是一点点想法,真实的制作肯定要远远复杂。
我们这里只是来模拟这个操作的过程,不能在实际中应用。
|