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 相关文章推荐
可以用来调试JavaScript错误的解决方案
Aug 07 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
Apr 26 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
three.js欧拉角和四元数的使用方法
Jul 26 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
Aug 27 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
Python 查看文件的读写权限方法
2018/01/23 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
汉语专业应届生求职信
2013/10/01 职场文书
特教教师先进事迹
2014/05/21 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
毕业生党员个人总结
2015/02/14 职场文书
教师辞职信范文
2015/02/28 职场文书
技术员个人工作总结
2015/03/03 职场文书
大学生自荐书范文
2015/03/05 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
简短清晨问候语
2015/11/10 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
总结Python常用的魔法方法
2021/05/25 Python
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫