原文地址: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