避免使用 imagemin 对图像进行两次压缩的方法是在压缩之前检查图像的压缩状态。以下是一个实现此功能的示例代码:
const imagemin = require('imagemin');
const imageminJpegtran = require('imagemin-jpegtran');
const imageminPngquant = require('imagemin-pngquant');
// 压缩图像的函数
async function compressImage(inputPath, outputPath) {
// 检查图像是否已经被压缩过
const isCompressed = await checkIfCompressed(inputPath);
if (isCompressed) {
console.log('图像已经被压缩过,跳过压缩过程');
return;
}
// 对图像进行压缩
await imagemin([inputPath], {
destination: outputPath,
plugins: [
imageminJpegtran(),
imageminPngquant()
]
});
console.log('图像压缩完成');
}
// 检查图像是否已经被压缩过的函数
async function checkIfCompressed(inputPath) {
// 在此处添加检查图像压缩状态的逻辑,可以通过读取图像的元数据或者其他方式进行判断
// 返回一个布尔值,表示图像是否已经被压缩过
// 示例中使用了一个假设的函数 isImageCompressed 来模拟检查图像压缩状态的过程
const isCompressed = await isImageCompressed(inputPath);
return isCompressed;
}
// 模拟检查图像是否已经被压缩过的函数
function isImageCompressed(inputPath) {
return new Promise((resolve, reject) => {
// 在此处添加检查图像压缩状态的逻辑
// 示例中使用了一个假设的定时器来模拟耗时的检查过程
setTimeout(() => {
const isCompressed = false; // 假设图像未被压缩过
resolve(isCompressed);
}, 2000);
});
}
// 调用压缩函数
compressImage('input.jpg', 'output');
上述代码中,首先在 compressImage
函数中调用了 checkIfCompressed
函数来检查图像的压缩状态。如果图像已经被压缩过,则跳过压缩过程;否则,调用 imagemin
来对图像进行压缩。在 checkIfCompressed
函数中,可以根据实际需求添加逻辑来检查图像的压缩状态。
请注意,上述代码中的 isImageCompressed
函数只是一个示例,用于模拟检查图像压缩状态的过程。实际使用时,需要根据具体情况编写检查图像压缩状态的逻辑。