HarmonyOS鸿蒙Next中如何将拍照或者相册的图片压缩并转化base64格式
HarmonyOS鸿蒙Next中如何将拍照或者相册的图片压缩并转化base64格式 如何将拍照或者相册的图片压缩并转化base64格式
3 回复
您好,这个demo是拉起相机然后拍照保存到指定的目录,然后转为base64的整个流程
import picker from '@ohos.multimedia.cameraPicker'
import camera from '@ohos.multimedia.camera';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
import fileuri from '@ohos.file.fileuri';
import fs from '@ohos.file.fs';
import { buffer } from '@kit.ArkTS';
import { image } from '@kit.ImageKit';
let mContext = getContext(this) as common.Context;
class CameraPosition {
cameraPosition : camera.CameraPosition
saveUri :string
constructor(cameraPosition : camera.CameraPosition,saveUri:string) {
this.cameraPosition = cameraPosition
this.saveUri = saveUri
}
}
let pathDir = getContext().filesDir;
let filePath = pathDir + `${new Date().getTime()}.jpg`
fs.createRandomAccessFileSync(filePath, fs.OpenMode.CREATE);
let uri = fileuri.getUriFromPath(filePath);
async function demo() {
try {
let pickerProfile = new CameraPosition(camera.CameraPosition.CAMERA_POSITION_BACK,uri)
//前置摄像机传CAMERA_POSITION_FRONT,后置摄像机传CAMERA_POSITION_BACK,saveuri传想存到对应沙箱的uri
let pickerResult: picker.PickerResult = await picker.pick(mContext, [picker.PickerMediaType.PHOTO, picker.PickerMediaType.VIDEO], pickerProfile);
console.log("the pick pickerResult is:" + JSON.stringify(pickerResult));
} catch (error) {
let err = error as BusinessError;
console.error(`the pick call failed. error code: ${err.code}`);
}
}
@Entry
@Component struct Photopage{
@State base64Str:string = ''
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;
}
build(){
Row(){
Column(){
Button('拉起后置摄像头').margin({bottom:20}).onClick(() =>{ demo() })
Button('uri转为base64').onClick(async () =>{
this.base64Str = await this.getImageBase64WithUri(uri)
})
Image(this.base64Str)
.width(300)
.height(400)
}
}
}
}
更多关于HarmonyOS鸿蒙Next中如何将拍照或者相册的图片压缩并转化base64格式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,要将拍照或相册中的图片压缩并转换为Base64格式,可以使用Image和util模块。首先,通过Image模块加载图片,然后使用Image.Packer进行压缩。接着,使用util.base64将压缩后的图片数据转换为Base64格式。以下是关键代码示例:
import image from '@ohos.multimedia.image';
import util from '@ohos.util';
// 加载图片
let imageSource = image.createImageSource(/* 图片资源 */);
let imagePacker = image.createImagePacker();
// 设置压缩参数
let packOpts = {
format: "image/jpeg",
quality: 80
};
// 压缩图片
imagePacker.packing(imageSource, packOpts).then(data => {
// 转换为Base64
let base64 = util.base64EncodeSync(data);
console.log(base64);
}).catch(error => {
console.error("压缩或转换失败: " + error);
});
这段代码首先加载图片资源,然后通过ImagePacker进行压缩,最后使用util.base64EncodeSync将压缩后的图片数据转换为Base64格式。
在HarmonyOS Next中,你可以通过以下步骤将图片压缩并转换为Base64格式:
- 获取图片:从相机或相册获取图片,保存为
PixelMap对象。 - 压缩图片:使用
ImageSource和ImagePacker进行图片压缩,设置压缩参数如质量、尺寸等。 - 转换为Base64:将压缩后的图片数据通过
Base64Encoder转换为Base64字符串。
代码示例:
// 获取图片并压缩
ImageSource imageSource = ImageSource.create(uri, null);
ImagePacker packer = ImagePacker.create();
PackOptions options = new PackOptions.Builder().setQuality(50).build();
byte[] compressedImage = packer.pack(imageSource, options);
// 转换为Base64
String base64Image = Base64.encodeToString(compressedImage, Base64.DEFAULT);
确保在ohos.global.icu.util和ohos.media.image中导入相关类。

