HarmonyOS 鸿蒙Next:如何将拍照或者相册的图片压缩并转化为base64格式
HarmonyOS 鸿蒙Next:如何将拍照或者相册的图片压缩并转化为base64格式 如何将拍照或者相册的图片压缩并转化base64格式
2 回复
拉起相机拍照保存到指定的目录,然后转为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鸿蒙系统中,将拍照或相册的图片压缩并转化为Base64格式,可以通过以下步骤实现:
首先,获取图片数据。这可以通过拍照或从相册选择图片来完成。拍照功能通常涉及调用相机API,而选择图片则可能涉及访问存储权限和相册API。
接着,对图片进行压缩。HarmonyOS提供了多种图像处理方式,你可以使用BitmapFactory解码图片,并通过设置inSampleSize参数来实现压缩。请注意,压缩过程可能会影响图片质量,因此需要权衡压缩率和图片清晰度。
然后,将压缩后的图片数据转化为字节数组。这可以通过调用图片的toByteArray方法来实现。
最后,将字节数组编码为Base64格式。HarmonyOS提供了Base64编码的API,你可以使用这些API将字节数组转换为Base64字符串。
示例代码如下(注意:具体实现可能因版本和API差异而有所不同):
// 伪代码,具体实现需根据HarmonyOS API调整
Bitmap bitmap = // 获取并压缩后的Bitmap对象
ByteArrayOutputStream baos = new ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos) // quality为压缩质量
byte[] byteArray = baos.toByteArray()
String base64 = Base64.encodeToString(byteArray, Base64.DEFAULT)
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html