Files
Cocos3.8.5/extensions/quick-compress-image/lib/imageminApi.js
ZhouXiao 487c68994d feat: add builder configuration file
feat: add cocos-service configuration file
feat: add device configuration file
feat: add engine configuration file
feat: add information configuration file
feat: add program configuration file
feat: add project configuration file
feat: add TypeScript configuration file
2025-12-22 11:42:51 +08:00

78 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

let Path = require('path')
let Fs = require('fs');
let imageminApi = require('../lib/imagemin.min')
let packageCfg = require('../package.json')
module.exports = {
async getZipRate(){
let rate = parseInt(await Editor.Profile.getConfig(packageCfg.name,'zipRate')) || 30;
if(rate<0){
rate = 1;
}else if(rate>100){
rate = 100
}
return rate;
},
/**
* 调用压缩工具api
* @param {Array<{file:string,uuid:string}>} fileInfo
*/
async compressPicture(arrList,imageFileList){
let rate = await this.getZipRate();
let pngRate = rate*0.01;
console.log("压缩值:",rate+"%");
imageminApi.imagemin(arrList, {
plugins: [
imageminApi.imageminMozjpeg({ quality: rate }), //压缩质量0,1
imageminApi.imageminPngquant({
quality: [pngRate, Math.min(pngRate+0.25,1)] //压缩质量0,1
})
]
}).then((arrRes) => {
console.log("压缩成功,详情:\n")
for (let i = 0; i < arrRes.length; i++) {
const res = arrRes[i];
this.onCompressedSucceed(imageFileList,res)
}
}).catch(err => {
console.log("压缩失败:",err)
});
},
/**
* 压缩成功
* @param {Array<{file:string,uuid:string,size:number}>} imageFileList
* @param {Object<{data:Buffer,sourcePath:string}>} res
*/
onCompressedSucceed(imageFileList,res){
let desc = ""
for (let i = 0; i < imageFileList.length; i++) {
const fileInfo = imageFileList[i];
if(fileInfo.file.replace(/\\/g,'/') == res.sourcePath){
const fileName = Path.basename(fileInfo.file);
const newSize = res.data.byteLength;
const rate = (fileInfo.size-newSize)/fileInfo.size;
const oldMb = (fileInfo.size / 1024).toFixed(1) + " KB";
const newMb = (newSize / 1024).toFixed(1) + " KB";
if(newSize < fileInfo.size){
Fs.writeFileSync(res.sourcePath, res.data)
desc += `${fileName}、压缩率:${parseInt(rate*100)}%、压缩前后大小:${newMb} / ${oldMb}`
}else{
desc += `${fileName}、无法继续压缩`
}
break;
}
}
console.log(desc);
},
}