nodejs 图片压缩

2024-09-17  本文已影响0人  zhuyx0304
const fs = require('fs');
const path = require('path');
const sharp = require('sharp');

// 图片扩展名数组
const imageExtensions = ['.png'];

// 目录遍历函数
function walkDir(dirPath) {
    fs.readdir(dirPath, (err, files) => {
        if (err) {
            console.error(`Error reading directory: ${dirPath}`);
            return;
        }

        files.forEach(file => {
            const filePath = path.join(dirPath, file);
            fs.stat(filePath, (error, stats) => {
                if (error) {
                    console.error(`Error getting file info: ${filePath}`);
                    return;
                }

                // 如果是目录,则递归调用 walkDir
                if (stats.isDirectory()) {                    
                    walkDir(filePath);
                } else { // 否则是文件
                    const extname = path.extname(file).toLowerCase();
                    if (imageExtensions.includes(extname)) {
                        const fileName = path.basename(filePath);
                        const sourcePath = dirPath.replace(/\\/g, '/');
                        const outputPath = dirPath.replace('source', 'dist');

                        if (!fs.existsSync(outputPath)) {
                            fs.mkdirSync(outputPath);
                        }

                        processImage(`${sourcePath}/${fileName}`, `${outputPath}/${fileName}`);
                    }
                }
            });
        });
    });
}

// 处理图片的函数
function processImage(sourcePath, outputPath) {
    sharp(sourcePath)
        .png({ quality: 75 })
        .toFile(outputPath) // 输出到新的文件
        .then(() => {
            console.log(`${sourcePath}-图片压缩成功`);
        })
        .catch(error => {
            console.error(`${sourcePath}-图片压缩失败`, error);
        });
}

// 调用函数开始遍历目录
const targetDirectory = 'source'; // 替换为实际目录路径
walkDir(targetDirectory);
上一篇 下一篇

猜你喜欢

热点阅读