Merge branch 'main' of github.com:LCJ-MinYa/sharp_img into main

main
lichaojun 1 year ago
commit 798524ccaa

@ -15,6 +15,11 @@ if (!inputDir || !previewDir) {
//创建输出文件夹
cover.scaleArr.forEach((item) => {
item.dir = `${inputDir}/${item.scale.join('x')}`;
// 如果之前存在生成的主图文件夹,先删除
if (fs.existsSync(item.dir)) {
fs.rmSync(item.dir, { recursive: true, force: true });
}
// 删除后再重新生成新的空文件夹
if (!fs.existsSync(item.dir)) {
fs.mkdirSync(item.dir);
}

@ -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…
Cancel
Save