feat: 压缩图片

main
LCJ-MinYa 1 year ago
parent 2dca793fa4
commit e20727378c

@ -12,25 +12,53 @@ if (!inputDir || !previewDir) {
return;
}
async function reduceImgSize(imgPath, tempImgPath) {
async function reduceImgSize(imgPath, tempImgPath, size) {
let { width } = await sharp(imgPath).metadata();
const size = fs.statSync(imgPath).size;
const fileSizeInMB = size / (1024 * 1024); // 将字节转换为 MB
console.log(width, fileSizeInMB);
// .resize(800) // 调整图片宽度为 800 像素
// .jpeg({ quality: 80 }) // 设置 JPEG 格式的质量为 80%
// .toFile('output.jpg', (err, info) => {
// if (err) throw err;
// console.log('图片已成功压缩:', info);
// });
if (size > 3 && size < 5) {
console.log('压缩方式1');
return sharp(imgPath).jpeg({ quality: 90 }).toFile(tempImgPath);
}
if (size >= 5 && size < 10) {
console.log('压缩方式2');
return sharp(imgPath)
.resize(width / 1.2)
.jpeg({ quality: 90 })
.toFile(tempImgPath);
}
if (size >= 10) {
console.log('压缩方式3');
return sharp(imgPath)
.resize(width / 2)
.jpeg({ quality: 90 })
.toFile(tempImgPath);
}
}
fs.readdirSync(previewDir).forEach(async (file) => {
const ext = file.split('.').pop().toLowerCase();
if (cover.imgFormat.has(ext)) {
const imgPath = path.join(previewDir, file);
const tempImgPath = path.join(previewDir, `${file}_temp`);
reduceImgSize(imgPath, tempImgPath);
const size = fs.statSync(imgPath).size;
// 将字节转换为 MB
const fileSizeInMB = size / (1024 * 1024);
if (fileSizeInMB > 3) {
const tempImgPath = path.join(previewDir, `${file}_temp`);
reduceImgSize(imgPath, tempImgPath, fileSizeInMB)
.then(() => {
// 处理完后,将临时文件重命名为原始文件
fs.rename(tempImgPath, imgPath, (err) => {
if (err) {
console.error('重命名失败:', err);
} else {
console.log('压缩图片成功,文件已被覆盖:', imgPath);
}
});
})
.catch((err) => {
console.error('发生错误:', err);
});
}
}
});

Loading…
Cancel
Save