HarmonyOS 拍照uri转base64流?

如题:HarmonyOS 拍照uri转base64流?

阅读 467
1 个回答

参考demo:

import fs from '@ohos.file.fs';
import buffer from '@ohos.buffer';

/**
 * 图片转base64
 *
 * @param filePath 文件路径
 * @param bufferLen
 * @returns base64
 */
export function imageToBase64(filePath: string, bufferLen = 409600) {
  try {
    const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
    const arrayBuffer = new ArrayBuffer(bufferLen);
    const readLen = fs.readSync(file.fd, arrayBuffer);
    const buf = buffer.from(arrayBuffer, 0, readLen);
    const base64 = buf.toString('base64');
    fs.closeSync(file);
    return base64;
  } catch (e) {
    console.error('file err:', JSON.stringify(e));
    return ''
  }
}

/**
 * base64转图片
 *
 * @param base64
 * @param filePath
 */
export function base64ToImage(base64: string, filePath: string) {
  try {
    const reg = new RegExp();
    const str = base64.replace(reg, "");
    const dataBuffer = buffer.from(str, 'base64');
    const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    fs.writeSync(file.fd, dataBuffer.buffer);
    fs.closeSync(file);
  } catch (e) {
    console.error('file err:', JSON.stringify(e));
  }
}
Image(this.pixelMap).width(200).height(200)
Button('打开相册')
  .onClick(() => {
    //创建图库选择器对象实例
    const photoViewPicker =new photoAccessHelper.PhotoViewPicker();
    //调用select()接口拉起图库界面进行文件选择,文件选择成功后,返回PhotoSelectResult结果集
    photoViewPicker.select().then(async (photoSelectResult: picker.PhotoSelectResult) => {
      //用一个全局变量存储返回的uri
      selectUris = photoSelectResult.photoUris;
      console.info('photoViewPicker.select to file succeed and uris are:' + selectUris);
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })
  })
Button('creatPixelMap')
  .margin({ top: 5 })
  .onClick((event: ClickEvent) => {
    //使用fs.openSync接口,通过uri打开这个文件得到fd
    let file = fs.openSync(selectUris[0], fs.OpenMode.READ_ONLY);
    console.info('file fd: ' + file.fd);
    //根据文件fd创建imagSource
    const imageSource: image.ImageSource = image.createImageSource(file.fd);
    //完成后关闭fd
    fs.closeSync(file);
  });
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进