HarmonyOS 鸿蒙Next 使用cameraPicker获取到图片的uri如何转换成base64数据?

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用cameraPicker获取到图片的uri如何转换成base64数据?

使用cameraPicker获取到图片的uri如何转换成base64数据?

2 回复

可以参考:

let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);

const imageSource: image.ImageSource = image.createImageSource(file.fd);

let opts: image.DecodingOptions = { editable: true }

let pixelMap = await imageResource.createPixelMap(opts);

// 转换成base64

const imagePackerApi: image.ImagePacker = image.createImagePacker();

let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 100 };

imagePackerApi.packing(pixelMap, packOpts).then((data: ArrayBuffer) => {

  let buf: buffer.Buffer = buffer.from(data);

  this.base64 = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length);

  console.info('base64: ' + this.base64);

})

在HarmonyOS鸿蒙系统中,将通过cameraPicker获取到的图片URI转换成Base64数据,可以通过以下步骤实现:

  1. 获取Bitmap对象:首先,利用MediaStore API或UriContentProvider读取URI对应的图片,并转换为Bitmap对象。这通常涉及到内容解析和权限处理。

  2. Bitmap转Byte数组:将得到的Bitmap对象通过compress方法(如PNG或JPEG格式)转换为字节数组。这一步需要注意图片质量的设置,以避免生成的Base64数据过大。

  3. Byte数组转Base64:使用Java标准库中的Base64类,将字节数组编码为Base64字符串。

示例代码片段(假设已获取到Bitmap对象bitmap):

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] byteArray = baos.toByteArray();
String base64 = Base64.encodeToString(byteArray, Base64.DEFAULT);

上述方法涵盖了从URI到Base64的基本转换流程。如果在实际操作中遇到权限、URI解析等问题,请检查相关API文档和权限配置。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部