compress-picture-js
Version:
48 lines (42 loc) • 1.39 kB
text/typescript
import { IOptions } from '../../util/option/option.util.js';
import { IResponse, responseUtil } from '../../util/response/response.util.js';
import { CreateDirSyncFromFilename } from '../../util/file/file.util.js';
import { ExecCommandSync } from '../../util/cmd/cmd.util.js';
import { ICode } from '../../util/response/respone_enum.util.js';
import mozjpeg from 'mozjpeg';
import { ExecFileException } from 'child_process';
// CompressJPG 压缩JPG
export function CompressJPG(options: IOptions): IResponse {
let resp = responseUtil.DefaultIResponse();
// console.log("🚀", options);
// 检查输出文件夹
CreateDirSyncFromFilename(options['output']);
let commandArs = [
'-quality',
jpgCompressQuality(options['quality']),
'-outfile',
options['output'],
options['input'],
];
try {
ExecCommandSync(mozjpeg, commandArs);
} catch (e: any) {
resp.code = ICode.FAILED;
resp.reason = ICode[ICode.FAILED];
let err = e as ExecFileException;
if (err.message !== '') {
resp.message = err.message;
resp.metadata = err;
} else {
resp.message = '压缩JPG/JPEG失败:' + JSON.stringify(options);
}
}
return resp;
}
// jpgCompressQuality jpg压缩质量
function jpgCompressQuality(quality: number): string {
if (quality < 0 || quality > 100) {
return '100';
}
return quality.toString();
}