【Node】簡單快捷的圖片壓縮腳本

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

相關文章
相關標籤/搜索