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 相关文章推荐
在textarea中显示html页面的javascript代码
Apr 20 Javascript
编写可维护面向对象的JavaScript代码[翻译]
Feb 12 Javascript
基于jquery循环map功能的代码
Feb 26 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
Nov 19 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
JavaScript函数基础详解
Feb 03 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
Mar 03 Javascript
浅谈js获取ModelAndView值的问题
Mar 28 Javascript
Vuex实现数据增加和删除功能
Nov 11 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 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基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
js数组去重的方法总结
2019/01/18 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
在Python中处理时间之clock()方法的使用
2015/05/22 Python
深入理解python对json的操作总结
2017/01/05 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
python字典一键多值实例代码分享
2019/06/14 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
opencv 阈值分割的具体使用
2020/07/08 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
魅力教师事迹材料
2014/01/10 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
市场开发计划书
2014/05/07 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年公司工作总结
2014/11/22 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
大学军训心得体会800字
2016/01/11 职场文书