diff --git a/src/reduce_img_size.js b/src/reduce_img_size.js index 8658201..ca17f77 100644 --- a/src/reduce_img_size.js +++ b/src/reduce_img_size.js @@ -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); + }); + } } });