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 相关文章推荐
showModelessDialog()使用详解
Sep 21 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
formvalidator验证插件中有关ajax验证问题
Jan 04 Javascript
js点击文本框后才加载验证码实例代码
Oct 20 Javascript
H5移动端图片压缩上传开发流程
Nov 09 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
jQuery实现定时隐藏对话框的方法分析
Feb 12 jQuery
babel之配置文件.babelrc入门详解
Feb 22 Javascript
vue debug 二种方法
Sep 16 Javascript
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
购物车前端开发(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
使用PHP编写的SVN类
2013/07/18 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
判断网页编码的方法python版
2016/08/12 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
岗位职责定义及内容
2013/11/08 职场文书
受欢迎的大学生自我评价
2013/12/05 职场文书
狼和鹿教学反思
2014/02/05 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
镇创先争优活动总结
2014/08/28 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
阿凡达观后感
2015/06/10 职场文书
西游记读书笔记
2015/06/25 职场文书
医院消毒隔离制度
2015/08/05 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis