中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
如何将PixelMap转图片base64字符串?
微信扫码分享
import { util } from '@kit.ArkTS'; import { image } from '@kit.ImageKit'; import { BusinessError } from '@kit.BasicServicesKit'; /** * PixelMap转图片base64字符串 * @param pixelMap * @param format 目标格式,默认png,当前只支持jpg、webp和png。当传入的格式与文件格式不匹配,可能会导致生成错误的Base64字符串。 * @returns */ async pixelMapToBase64Str(pixelMap: image.PixelMap, format: string = 'image/png'): Promise<string> { try { let packOpts: image.PackingOption = { format: format, quality: 100 } const arrayBuffer = await this.packingFromPixelMap(pixelMap, packOpts); let base64 = new util.Base64Helper(); let base64Str: string = base64.encodeToStringSync(new Uint8Array(arrayBuffer)); let headStr = `data:${format};base64,`; if (!base64Str.startsWith(headStr)) { base64Str = headStr + base64Str } return base64Str; } catch (err) { let error = err as BusinessError; // LogUtil.error(`ImageUtil-pixelMapToBase64Str-异常 ~ code: ${error.code} -·- message: ${error.message}`); return ''; } } /** * 图片压缩或重新打包,使用Promise形式返回结果。 * @param source PixelMap-打包的PixelMap资源。 * @param options 设置打包参数: * format 目标格式。当前只支持jpg(image/jpeg)、webp 和 png(image/png)。 * quality JPEG编码中设定输出图片质量的参数,取值范围为0-100。 * bufferSize 接收编码数据的缓冲区大小,单位为Byte。默认为10MB。bufferSize需大于编码后图片大小。 * @returns */ packingFromPixelMap(source: image.PixelMap, options: image.PackingOption): Promise<ArrayBuffer> { const imagePacker: image.ImagePacker = image.createImagePacker(); return imagePacker.packing(source, options).finally(() => { imagePacker.release(); //释放 }); }