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();
|