Merge branch 'main' of github.com:LCJ-MinYa/sharp_img into main
commit
798524ccaa
@ -0,0 +1,64 @@
|
|||||||
|
const sharp = require('sharp');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const { getInputDir } = require('../utils/index');
|
||||||
|
const { cover } = require('../config/index');
|
||||||
|
|
||||||
|
//工作目录文件夹路径
|
||||||
|
let inputDir = getInputDir();
|
||||||
|
const previewDir = `${inputDir}/预览图`;
|
||||||
|
if (!inputDir || !previewDir) {
|
||||||
|
console.log('未执行裁剪主图功能,工作目录不存在');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function reduceImgSize(imgPath, tempImgPath, size) {
|
||||||
|
let { width } = await sharp(imgPath).metadata();
|
||||||
|
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 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…
Reference in New Issue