HarmonyOS鸿蒙Next中相册选的图片如何转换成base64

HarmonyOS鸿蒙Next中相册选的图片如何转换成base64 相册选的图片如何转换成base64

使用util.Base64Helper转换不成功 不知道哪里出问题了

3 回复

可以参考代码

import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';
import { buffer, util } from '@kit.ArkTS';
import { image } from '@kit.ImageKit';

@Entry
@Component
struct Index {
  @State baseStr: string = ''

  build() {
    Row() {
      Column() {
        Text(this.baseStr)
          .width('90%')
          .margin({ bottom: 20 })
        Button("选择图片")
          .onClick(() => {
            this.selectPhoto()
          })

      }.width('100%')
    }.height('100%')
  }

  selectPhoto() {
    const photoSelectOptions = new picker.PhotoSelectOptions();
    const photoViewPicker = new picker.PhotoViewPicker();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
    photoSelectOptions.maxSelectNumber = 1; // 选择媒体文件的最大数目
    photoViewPicker.select(photoSelectOptions).then(async (photoSelectResult: picker.PhotoSelectResult) => {
      const fileUri = photoSelectResult.photoUris[0]
      const baseStr = await this.getImageBase64WithUri(fileUri)
      this.baseStr = baseStr

    })
  }

  async getImageBase64WithUri(uri: string): Promise<string> {
    const file = await fs.open(uri, fs.OpenMode.READ_ONLY);
    const imageSource : image.ImageSource = image.createImageSource(file.fd);
    const imagePackerApi = image.createImagePacker();
    // 设置打包参数
    // format:当前仅支持打包为JPEG、WebP 和 png 格式
    // quality:JPEG 编码输出图片质量
    // bufferSize:图片大小,默认 10M
    const packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 };
    let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
    let resultBase64Str = ''
    try {
      // 图片压缩或重新打包
      imageBuffer = await imagePackerApi.packing(imageSource, packOpts);
      let base64Str = buffer.from(imageBuffer).toString('base64')
      resultBase64Str="data:image/jpeg;base64,"+base64Str

    } catch (err) {
      console.error(`Invoke getImageArrayBufferWithUri failed, err: ${JSON.stringify(err)}`);
    }
    return resultBase64Str;
  }
}

更多关于HarmonyOS鸿蒙Next中相册选的图片如何转换成base64的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,将相册中的图片转换成Base64可以通过以下步骤实现:

  1. 获取图片的URI:首先,使用PhotoViewPickerDataAbilityHelper从相册中获取图片的URI。

  2. 读取图片数据:通过FileDescriptorInputStream读取图片的二进制数据。

  3. 转换为Base64:使用Base64工具类将二进制数据编码为Base64字符串。

具体代码示例:

import photoAccessHelper from '@ohos.file.photoAccessHelper';
import base64 from '@ohos.base64';

// 获取相册图片的URI
let photoPicker = new photoAccessHelper.PhotoViewPicker();
let photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
photoSelectOptions.MIME_TYPE = ['image/*'];
photoPicker.select(photoSelectOptions).then((photoSelectResult) => {
    let uri = photoSelectResult[0];
    // 读取图片数据
    let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
    let buffer = new ArrayBuffer(fs.statSync(uri).size);
    fs.readSync(file.fd, buffer);
    fs.closeSync(file);
    // 转换为Base64
    let base64String = base64.encodeToString(buffer, base64.NO_WRAP);
    console.log(base64String);
}).catch((err) => {
    console.error(`Failed to select photo. Code is ${err.code}, message is ${err.message}`);
});

此代码展示了如何从相册中选择图片并将其转换为Base64字符串。

在HarmonyOS鸿蒙Next中,将相册中的图片转换为Base64编码可以通过以下步骤实现:

  1. 获取图片文件:使用FilePicker选择相册中的图片,获取文件路径。
  2. 读取图片数据:通过FileReader读取图片文件的二进制数据。
  3. 转换为Base64:使用Base64类将二进制数据编码为Base64字符串。

示例代码:

FilePicker picker = new FilePicker(context);
picker.setType("image/*");
picker.setOnFilePickListener(filePath -> {
    byte[] fileData = FileReader.readFile(filePath);
    String base64 = Base64.encodeToString(fileData, Base64.DEFAULT);
    // 使用base64字符串
});
picker.pick();

确保处理读取文件时的异常,并根据应用需求优化性能。

回到顶部