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 三种不同位置代码的写法
Oct 25 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
Sep 06 Javascript
微信小程序 二维码canvas绘制实例详解
Jan 06 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
vue v-model动态生成详解
Jun 30 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
vue使用element-ui按需引入
May 20 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
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
js取得url地址参数实例
2013/02/22 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python绘制直方图和密度图的实例
2019/07/08 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
空中乘务员岗位职责
2014/03/08 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
三字经教学反思
2014/04/26 职场文书
演讲比赛策划方案
2014/06/11 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
用JS写一个发布订阅模式
2021/11/07 Javascript
django中websocket的具体使用
2022/01/22 Python