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);
网友评论