|
|
|
@ -12,25 +12,53 @@ if (!inputDir || !previewDir) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function reduceImgSize(imgPath, tempImgPath) {
|
|
|
|
async function reduceImgSize(imgPath, tempImgPath, size) {
|
|
|
|
let { width } = await sharp(imgPath).metadata();
|
|
|
|
let { width } = await sharp(imgPath).metadata();
|
|
|
|
const size = fs.statSync(imgPath).size;
|
|
|
|
if (size > 3 && size < 5) {
|
|
|
|
const fileSizeInMB = size / (1024 * 1024); // 将字节转换为 MB
|
|
|
|
console.log('压缩方式1');
|
|
|
|
console.log(width, fileSizeInMB);
|
|
|
|
return sharp(imgPath).jpeg({ quality: 90 }).toFile(tempImgPath);
|
|
|
|
// .resize(800) // 调整图片宽度为 800 像素
|
|
|
|
}
|
|
|
|
// .jpeg({ quality: 80 }) // 设置 JPEG 格式的质量为 80%
|
|
|
|
|
|
|
|
// .toFile('output.jpg', (err, info) => {
|
|
|
|
if (size >= 5 && size < 10) {
|
|
|
|
// if (err) throw err;
|
|
|
|
console.log('压缩方式2');
|
|
|
|
// console.log('图片已成功压缩:', info);
|
|
|
|
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) => {
|
|
|
|
fs.readdirSync(previewDir).forEach(async (file) => {
|
|
|
|
const ext = file.split('.').pop().toLowerCase();
|
|
|
|
const ext = file.split('.').pop().toLowerCase();
|
|
|
|
if (cover.imgFormat.has(ext)) {
|
|
|
|
if (cover.imgFormat.has(ext)) {
|
|
|
|
const imgPath = path.join(previewDir, file);
|
|
|
|
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);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|