如何用Jimp自定义质量保存JPEG?遇leftHalf.quality不是函数错误
解决Jimp@1.6.0调用quality报错问题
问题原因
Jimp@1.6.0的crop方法不支持传入{x,y,w,h}格式的配置对象,必须传入四个独立的位置参数;同时你之前的写法可能因crop未正确执行,导致后续实例方法调用异常。
修正方案
- 将
crop的调用改为传入四个独立参数:x、y、裁剪宽度、裁剪高度 - 利用Jimp的链式调用特性,直接在
crop后调用quality()设置压缩质量,再通过write()保存(Jimp的write支持async/await,无需手动包裹Promise)
修正后的完整代码
const buffer = Buffer.from(decodedData, 'base64') const image = await Jimp.read(buffer) const width = image.width const height = image.height const splitPoint = Math.floor(width / 2) // 修正crop参数为四个独立值 const leftHalf = image.clone().crop(0, 0, splitPoint, height) const rightHalf = image.clone().crop(splitPoint, 0, width - splitPoint, height) // 原保存逻辑 await leftHalf.write('leftHalf.jpg') await rightHalf.write('rightHalf.jpg') // 降低质量保存 await leftHalf.quality(70).write('leftHalf2.jpg') await rightHalf.quality(70).write('rightHalf2.jpg')
补充说明
quality()方法仅对JPEG和WEBP格式图片生效,你的图片为JPEG,符合使用条件- 确保所有Jimp方法调用的参数符合1.6.0版本的API规范,2.x版本的部分特性(如对象参数的
crop)在1.6.0中不兼容
内容的提问来源于stack exchange,提问作者Jabu
相关产品推荐
相关产品推荐

