原文地址:github.com/HuJiaoHJ/bl…node
在写我的博客时,常常须要使用到图片,为了优化文章的阅读体验,须要对图片进行压缩,如今有不少好用的图片压缩网站,好比:tinypng.com/git
可是每次压缩都手动的去上传下载,还挺麻烦的,因而想着写一个node脚原本作图片压缩工做github
本文介绍的方法真的很简单快捷,使用的是 tinypng.com/ 提供的Node API,文档:tinypng.com/developers/…api
在使用以前,须要去申请一个API Key,入口:tinypng.com/developers,注意一个API Key一个月只能免费压缩500个图片,不过我以为仍是够用的数组
具体使用方式能够参考官方文档,下面介绍如何批量的对图片进行压缩,直接上代码:promise
tinify.js优化
const tinify = require('tinify');
const apiKey = require('./api_key');
const fs = require('fs');
const path = require('path');
// API Key
tinify.key = apiKey;
// 执行图片压缩任务,返回promise对象
const task = file => {
const source = tinify.fromFile(file.fromFile);
source.toFile(file.toFile);
return source._url;
}
// 经过输入文件夹和输出文件夹,返回一个数组
const fromDir = (inDir, outDir, _files = []) => {
const files = fs.readdirSync(inDir);
for (let file of files) {
const filePath = `${inDir}/${file}`;
const toFilePath = `${outDir}/${file}`;
if (fs.statSync(filePath).isDirectory()) {
fromDir(filePath, toFilePath, _files)
} else {
try {
fs.accessSync(toFilePath);
} catch (err) {
_files.push({
fromFile: filePath,
toFile: toFilePath,
});
}
}
}
return _files;
}
const rootDir = fs.realpathSync(process.cwd());
const screenshotDir = path.resolve(rootDir, './screenshotin');
const screenshotOutDir = path.resolve(rootDir, './screenshot');
const files = fromDir(screenshotDir, screenshotOutDir);
// 遍历数组,顺序执行各任务
if (files.length === 0) {
return;
}
let current = task(files[0]);
for (let i = 1; i < files.length; i++) {
current = current.then(task(files[i]));
}
复制代码
执行 node tinify.js
,便可批量压缩 ./screenshotin
文件夹下的图片啦网站
这个脚本是用于压缩个人博客中的图片,基本能知足个人我的需求,其余状况并未考虑,但愿能对有须要的小伙伴有帮助~~~ui
喜欢个人文章小伙伴能够去 个人我的博客 点star ⭐️url