前言:清明三天假期已过手机上存储了不少的游玩照片,由于图片资源比较大在发送给朋友的时候特别慢。所以临时起义决定使用nodeJS进行处理一下。
imageminnpm官网介绍: https://www.npmjs.com/package/imagemin 建议更改为淘宝镜像,使用cnpm install imageminnpm进行模块的安装。
一、压缩效果对照
对照改图imageminnpm支持有损和无损压缩,同时支持不同类型的图片资源。 针对png和jpg两种类型的图片进行压缩,对比效果看一下:压前后大小减少了60%,图片效果没有任何变化。
二、代码展示:
在原始图片文件佳平级路径下生成一个新的同结构的文件夹 比如:愿资源文件夹:xx; 压缩后生成的文件夹:xx_new(压缩前后文件夹中的结构和图片的名称是没有变化的)
import imagemin from 'imagemin';
import imageminMozjpeg from 'imagemin-Mozjpeg';
import imageminPngquant from 'imagemin-pngquant';
import * as fs from 'fs';
import * as path from 'path';
function getFileDirectory(_pathName) {
let fileData = fs.readdirSync(_pathName);
if (fileData) {
for (let i = 0, j = fileData.length; i < j; i++) {
let tempPath = path.join(_pathName, fileData[i]);
let fileState = fs.statSync(tempPath);
if (fileState.isDirectory()) {
sourPathArray.push(tempPath);
getFileDirectory(tempPath);
}
}
}
}
let sourPathArray = [];
let sourcePath = process.argv[2];
let rootId = 0;
if (fs.statSync(sourcePath).isDirectory()) {
sourPathArray.push(sourcePath);
getFileDirectory(sourcePath);
let tempArray = sourcePath.split(path.sep);
rootId = tempArray.length - 1;
}
else {
console.log('缺少路径参数或非法路径!');
}
let newName = '_new';
let desPathArray = [];
for (let i = 0, j = sourPathArray.length; i < j; i++) {
let tepmArray = sourPathArray[i].split(path.sep);
tepmArray[rootId] = tepmArray[rootId] + newName;
let destPath = tepmArray.join(path.sep);
fs.mkdirSync(destPath, { recursive: true });
desPathArray.push(destPath);
}
sourPathArray.forEach(async (value, index) => {
const files = await imagemin([path.join(value, '*.{jpg,png}')], {
destination: desPathArray[index],
plugins: [
imageminMozjpeg(),
imageminPngquant()
]
});
console.log(files);
})
三、使用展示:
注意:1、最好使用cnpm进行安装,可避免一些安装失败的问题。 2、建议使用npm init生成package,并添加: “type”: “module”,来减少在使用中的一些报错。如果遇到什么问题可以百度进行查看解决~
|