node.js实现快速截图


Posted in Javascript onAugust 27, 2016

写文章的时候经常需要插入图片,插入现有的图片很简单,有时候制作一些优秀的网站列表的时候需要添加网页截图, 这个过程非常枯燥乏味,可以考虑开发一个命令行工具传入一个url,然后生成页面截图。

使用node-webshot进行网页截图

用到的npm模块有yargs和node-webshot,关于yargs的文章参考这里 从零开始打造个人专属命令行工具集——yargs完全指南 。

node-webshot是调用phantomjs来生成网页截图的,phantomjs是非常有名的npm项目,相当于一个脚本版的WebKit浏览器 ,通过phantomjs可以使用脚本 和网页进行交互,所以phantomjs经常用来进行网页自动化测试。

phantomjs会和普通的浏览器一样加载完整的网页内容,然后在内存里面进行渲染,虽然肉眼看不到它渲染的页面,但是通过生成图片就可以看到了,node-webshot使用的就是phantomjs的render接口来获取网页截图的。

node-webshot生成谷歌首页的示例代码:

var webshot = require('webshot'); 
 
webshot('google.com', 'google.png', function(err) { 
 // screenshot now saved to google.png 
}); 
phantomjs生成谷歌首页的示例代码: 
 
var page = require('webpage').create(); 
page.open('http://github.com/', function() { 
 page.render('github.png'); 
 phantom.exit(); 
});

那为什么不直接使用phantomjs呢?一个字懒!

另外node-webshot还对文件读写进行了简单的封装,相信任何熟悉node.js的开发人员,都能很简单的写出这样的接口,但是既然轮子好用就不要自己造了。

node-webshot流式调用的写法:

var webshot = require('webshot'); 
var fs   = require('fs'); 
 
var renderStream = webshot('google.com'); 
var file = fs.createWriteStream('google.png', {encoding: 'binary'}); 
 
renderStream.on('data', function(data) { 
 file.write(data.toString('binary'), 'binary'); 
});

node-webshit还支持生成移动版的网页截图:

var webshot = require('webshot'); 
 
var options = { 
 screenSize: { 
  width: 320 
 , height: 480 
 } 
, shotSize: { 
  width: 320 
 , height: 'all' 
 } 
, userAgent: 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac OS X; en-us)' 
  + ' AppleWebKit/531.21.20 (KHTML, like Gecko) Mobile/7B298g' 
}; 
 
webshot('flickr.com', 'flickr.jpeg', options, function(err) { 
 // screenshot now saved to flickr.jpeg 
});

最后再把yargs和node-webshot进行集成,可惜这部分工作人家也帮我们做好了,直接安装就行。

npm isntall -g webshot-cli

使用desktop-screenshot进行系统截图

desktop-screenshot是一个跨平台的系统截图项目,用法和node-webshot类似,只是少了一个url参数。

var screenshot = require('desktop-screenshot'); 
 
screenshot("screenshot.png", function(error, complete) { 
  if(error) 
    console.log("Screenshot failed", error); 
  else 
    console.log("Screenshot succeeded"); 
});

这个是我的系统截图

node.js实现快速截图

问题是我用调用命令行的时候这个窗口也会出现在截图上面,而且没有太好的办法来去除这个窗口,系统截图还是使用windows自带的好用点。

图片优化

最后介绍两个图片优化的工具

imagemin

svgo

svgo使用用来优化svg图片,svg将会代替icon font成为新的趋势,

Javascript 相关文章推荐
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
jquery-easyui关闭tab自动切换到前一个tab
Jul 29 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
JavaScript_ECMA5数组新特性详解
Jun 12 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
微信小程序实现图片上传功能
May 28 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
购物车前端开发(jQuery和bootstrap3)
Aug 27 #Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 #Javascript
轻松掌握JavaScript享元模式
Aug 27 #Javascript
JavaScript编码风格指南(中文版)
Aug 26 #Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
Aug 26 #Javascript
ES6中的数组扩展方法
Aug 26 #Javascript
jQuery实现微信长按识别二维码功能
Aug 26 #Javascript
You might like
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
PHP 转义使用详解
2013/07/15 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
Python程序语言快速上手教程
2012/07/18 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python程序慢的重要原因
2020/09/04 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
给幼儿园老师的表扬信
2014/01/19 职场文书
如何撰写岗位职责
2014/02/01 职场文书
陈欧广告词
2014/03/14 职场文书
实习评语大全
2014/04/26 职场文书
民事和解协议书格式
2014/11/29 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书