使用ImagePacker编码图片,下面是代码:
async process(imageData: image.PixelMap): Promise<ArrayBuffer> {
let currentTime = systemDateTime.getTime()
hilog.debug(0x00,"ImageProcessor","PackHandler")
let imagePacker = image.createImagePacker()
let packImageByte = await imagePacker.packing(imageData,{
format:this.params?.isJpg == true ? "image/jpeg" : "image/png" ,
quality:this.params?.quality !== undefined ? this.params.quality : 100,
})
await imagePacker.release()
hilog.debug(0x00,"ImageProcessor",`PackHandlerDone 耗时:${systemDateTime.getTime() - currentTime}ms`)
return packImageByte
}
但是当图片过大时会提示溢出。经过文档查阅,发现PackingOption中有个参数是bufferSize默认为25M,如果图片过大则会溢出,但是bufferSize应该是编码后文件的大小,但是这个bufferSize应该怎么在编码前获取呢?
PackingOption中bufferSize是接收编码数据的缓冲区大小,单位为Byte。如果不设置大小,默认为25M。
如果编码图片超过25M,需要指定大小。
可以参考示例:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/imagecompression