50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
|
|
const fs = require('fs');
|
|||
|
|
const path = require('path');
|
|||
|
|
const imagemin = require('imagemin');
|
|||
|
|
const imageminPngquant = require('imagemin-pngquant');
|
|||
|
|
|
|||
|
|
// 源目录和目标目录
|
|||
|
|
const srcDir = path.join(__dirname, 'src', 'assets');
|
|||
|
|
const destDir = path.join(__dirname, 'src', 'assets'); // 直接覆盖原文件
|
|||
|
|
|
|||
|
|
// 优化PNG图片的函数
|
|||
|
|
async function optimizePng() {
|
|||
|
|
try {
|
|||
|
|
console.log('开始优化PNG图片...');
|
|||
|
|
|
|||
|
|
// 读取源目录下的所有PNG图片
|
|||
|
|
const files = await imagemin([`${srcDir}/*.png`], {
|
|||
|
|
destination: destDir,
|
|||
|
|
plugins: [
|
|||
|
|
imageminPngquant({
|
|||
|
|
quality: [0.6, 0.8] // 质量范围
|
|||
|
|
})
|
|||
|
|
]
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('PNG图片优化完成!');
|
|||
|
|
console.log('优化的文件:');
|
|||
|
|
|
|||
|
|
// 计算并显示优化前后的文件大小对比
|
|||
|
|
for (const file of files) {
|
|||
|
|
const srcPath = path.join(srcDir, path.basename(file.sourcePath));
|
|||
|
|
const destPath = file.destinationPath;
|
|||
|
|
|
|||
|
|
const srcStats = fs.statSync(srcPath);
|
|||
|
|
const destStats = fs.statSync(destPath);
|
|||
|
|
|
|||
|
|
const srcSize = srcStats.size;
|
|||
|
|
const destSize = destStats.size;
|
|||
|
|
const reduction = ((srcSize - destSize) / srcSize * 100).toFixed(2);
|
|||
|
|
|
|||
|
|
console.log(`${path.basename(file.sourcePath)}: ${(srcSize / 1024).toFixed(2)}KB → ${(destSize / 1024).toFixed(2)}KB (减少${reduction}%)`);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('优化PNG图片时出错:', error);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 执行优化
|
|||
|
|
optimizePng();
|