使用node.js实现图片压缩
1 images模块介绍
处理图片往往会遇到图片压缩的问题,使用Windows系统自带的画图软件或者其它图像处理软件一般都能够实现图片的压缩,但是只能是单张处理,如果涉及到大批量的图片压缩的话,一张一张处理起来会相当麻烦。因此,可以考虑编写程序实现批量处理。node.js中提供了图片处理模块,比如gm、imagemin、images模块等。
本文中使用的是Node.js轻量级跨平台图像编解码库——images
1.1 安装
安装images
模块
npm install images
1.2 API接口
images(file) //从指定文件加载并解码图像images(width, height) //创建一个指定宽高的透明图像images(buffer[, start[, end]]) //从Buffer数据中解码图像images(image[, x, y, width, height]) //从另一个图像中复制区域来创建图像.fill(red, green, blue[, alpha])
//eg:images(200, 100).fill(0xff, 0x00, 0x00, 0.5) Fill image with color
//以指定颜色填充图像.draw(image, x, y) //在当前图像( x , y )上绘制 image 图像.encode(type[, config])
//eg:images("input.png").encode("jpg", {operation:50}) Encode image to buffer, config is image setting.
//以指定格式编码当前图像到Buffer,config为图片设置,目前支持设置JPG图像质量Return buffer //返回填充好的Buffer。注意:该操作将会切断调用链.save(file[, type[, config]])
//eg:images("input.png").encode("output.jpg", {operation:50}) Encoding and save the current image to a file, if the type is not specified, type well be automatically determined according to the file, config is image setting. eg: { operation:50 }
//编码并保存当前图像到 file ,如果type未指定,则根据 file 自动判断文件类型,config为图片设置,目前支持设置JPG图像质量.size([width[, height]]) //获取或者设置图像宽高,如果height未指定,则根据当前宽高等比缩放.resize(width[, height]) //设置图像宽高,如果height未指定,则根据当前宽高等比缩放, 默认采用 bicubic 算法。.width([width]) //获取或设置图像宽度.height([height]) //获取或设置图像高度images.setLimit(width, height) //设置库处理图片的大小限制,设置后对所有新的操作生效(如果超限则抛出异常)images.setGCThreshold(value) //设置图像处理库自动gc的阈值(当新增内存使用超过该阈值时,执行垃圾回收)images.getUsedMemory() //得到图像处理库占用的内存大小(单位为字节)images.gc() //强制调用V8的垃圾回收机制
1.3 接口示例
node-images 提供了类似jQuery的链式调用API,可以像下面这样调用:
var images = require("images");images("input.jpg") //Load image from file //加载图像文件.size(400) //Geometric scaling the image to 400 pixels width//等比缩放图像到400像素宽.draw(images("logo.png"), 10, 10) //Drawn logo at coordinates (10,10)//在(10,10)处绘制Logo.save("output.jpg", { //Save the image to a file, with the quality of 50quality : 50 //保存图片到文件,图片质量为50});
2 使用images模块实现图片批量压缩
要使用代码操作实现图片压缩处理,首先要明确思路:首先要有文件输入,然后处理,最后保存输出。而在node.js中就会涉及到文件系统(fs 模块
)。在这里,我们只需要使用fs 模块
获取到所有的目标图像的存放路径以及文件名,然后传递给images模块
,在images模块
中实现图像打开,压缩,保存的操作。具体代码如下所示:
var images = require("images");
var fs = require("fs");
var path = "test";
console.log(path);
function explorer(path){fs.readdir(path, function(err, files){//err 为错误 , files 文件名列表包含文件夹与文件if(err){console.log('error:\n' + err);return;}files.forEach(function(file){fs.stat(path + '/' + file, function(err, stat){if(err){console.log(err); return;}if(stat.isDirectory()){ // 如果是文件夹遍历explorer(path + '/' + file);}else{// 读出所有的文件console.log('文件名:' + path + '/' + file);var name = path + '/' + file;var outName = path + '/' +'another_'+fileimages(name).save(outName, { //Save the image to a file,whih quality 50quality : 60 //保存图片到文件,图片质量为50});} });});});
}
explorer(path);
3 fs模块简要说明
上述案例中主要用到了fs模块
中的fs.readdir()
方法和fs.stat()
方法。下面主要介绍一下这两种方法的使用:
3.1 读取目录fs.readdir()
用法:fs.readdir(path, callback)
参数:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。
3.2 获取文件信息fs.stat()
用法:fs.stat(path, callback)
参数:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数如:(err, stats), stats 是
fs.Stats
对象。
fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。例如判断是否为文件:
var fs = require('fs');fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {console.log(stats.isFile()); //true
})
stats类中的方法有:
方法 | 描述 |
---|---|
stats.isFile() | 如果是文件返回 true,否则返回 false。 |
stats.isDirectory() | 如果是目录返回 true,否则返回 false。 |
stats.isBlockDevice() | 如果是块设备返回 true,否则返回 false。 |
stats.isCharacterDevice() | 如果是字符设备返回 true,否则返回 false。 |
stats.isSymbolicLink() | 如果是软链接返回 true,否则返回 false。 |
stats.isFIFO() | 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。 |
stats.isSocket() | 如果是 Socket 返回 true,否则返回 false。 |
使用node.js实现图片压缩相关推荐
- JS前端图片压缩上传
JS前端图片压缩上传重点知识 最近在做一个手机端的图片上传,写了一个比较符合自己要求的方法,可供参考 在做这个功能模块时,我遇到了以下问题,都花费了大量时间: 1. 不知道怎么压缩图片,(代码和方法) ...
- 谈谈JS 的图片压缩
前言 说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类的有图片压缩工具 PPDuck3, JS 实现类的有插件 compression.js ,亦或是在线处理类的 OSS 上传 ...
- Node.js 实现 zip压缩和解压
Node.js 实现 zip压缩和解压 安装 compressing npm install compressing --save compressing.zip.compressDir('nodej ...
- node.js文件的压缩解压
node.js文件的压缩解压 流式读写文件 知识预知 例子 压缩解压文件 知识预知 压缩文件 解压文件 流式读写文件 第一步先要弄清楚为什么需要压缩和解压文件,这是因为文件太大了,我们需要将文件进行压 ...
- node.js实现图片上传(包含缩略图)
图片上传 使用multiparty插件实现上传 安装multiparty npm i --save multiparty 代码实现 const multiparty = require('multip ...
- Node.js aitaotu图片批量下载Node.js爬虫1.00版
即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ...
- Node.js umei图片批量下载Node.js爬虫1.00
这个爬虫在abaike爬虫的基础上改改图片路径和下一页路径就出来了,代码如下: //====================================================== // ...
- Node.js mimimn图片批量下载爬虫 1.00
这个爬虫在Referer设置上和其它爬虫相比有特殊性.代码: //====================================================== // mimimn图片批 ...
- 用node.js给图片加水印
一.准备工作: 首先,确保你本地已经安装好了node环境. 然后,我们进行图像编辑操作需要用到一个Node.js的库:images. 这个库的地址是:https://github.com/zhangy ...
最新文章
- 大开眼界!AI在医疗和汽车行业的11个有趣应用
- Android Context 详解
- 第三天:制定项目计划
- GNU编译优化级别-O -O1 -O2 -O3
- Openbiz Cubi 企业级应用程序开发(一)
- 浪曦视频--工厂方法模式
- 2019年1月《语音信号处理》期末考试
- PWM如何控制直流电机
- Ubuntu18.04安装有道词典
- Linux设置 鼠标滚轮方向,如何在Ubuntu中反转鼠标滚动方向(又名自然滚动) | MOS86...
- DW1000学习之路(三)--------DW1000的中断处理问题
- 不在被虐中成长就在被虐中死亡
- 数据库—属性 码 候选码 主码 外码 主属性 非主属性
- 英朗gt仪表盘图标说明_【英朗仪表盘】英朗仪表盘说明书、英朗仪表盘故障灯说明_车主指南...
- n个元素进栈,有几种出栈方式
- eclipse开发安卓android程序环境
- java 整数的立方和_java编程题目:编写一个程序,输入一个三位正整数,输出个、十、百位数字的立方和。新手,请详细一点...
- MySQL单元选择题及答案(期末复习题)
- 【全志A33】在Ubuntu下烧录程序
- 靶机渗透练习67-Looz