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可以通过以下步骤实现:
-
获取图片的URI:首先,使用
PhotoViewPicker
或DataAbilityHelper
从相册中获取图片的URI。 -
读取图片数据:通过
FileDescriptor
或InputStream
读取图片的二进制数据。 -
转换为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编码可以通过以下步骤实现:
- 获取图片文件:使用
FilePicker
选择相册中的图片,获取文件路径。 - 读取图片数据:通过
FileReader
读取图片文件的二进制数据。 - 转换为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();
确保处理读取文件时的异常,并根据应用需求优化性能。