HarmonyOS 人脸识别后的PixelMap转base64后,后台接口和在线网站都无法解码出图片
一、人脸识别后,需要将返回的图片数据转换成base64返回给后台接口进行解码校验
目前返回的是解码失败
二、验证:使用在线网站进行图片编码解码,
https://base64.guru/converter/decode/image
1、上传本地图片可以编解码
2、使用人脸识别的结果进行解码,失败
3、将图片转换成BGRA格式,再转码
4、HarmonyOS端端解码并创建pixelmap,可以正常展示
三、需求:
怎样转换,才能让base64转换后的字符串可以正常解码获取到一张图片呢?
代码如下
this.faceLiveUtils.getDectionResultInfoPixelMap().then((pixelMap)=>{
if(pixelMap){
PhotoChangeUtils.pixelMapToArray(pixelMap).then((buffer)=>{
//直接转码
let base64 = PhotoChangeUtils.arrayToBase64(buffer);
//将图片转换成BGRA格式,再转码
let grbaBuffer = PhotoChangeUtils.rgba2BGRA(buffer);
let headBase64 = PhotoChangeUtils.arrayToBase64(grbaBuffer);
BioassayApiUtil.startFaceValid(2, this.realName, this.idCardNumber, headBase64);
//解码并创建PixelMap
let uint8Array:Uint8Array = new util.Base64Helper().decodeSync(headBase64);
let arrayBuffer = uint8Array.buffer as ArrayBuffer;
let imageInfo = pixelMap.getImageInfoSync();
let w = imageInfo.size.width;
let h = imageInfo.size.height;
PhotoChangeUtils.arrayToPixelMap(arrayBuffer, w, h,
(pixelMap)=>{
this.pixelmap = pixelMap;
})
})
}
})
async pixelMapToArray(pixelMap:PixelMap): Promise<ArrayBuffer>{
//size为需要创建的像素buffer大小,取值为:height * width *4
let size = pixelMap.getPixelBytesNumber();
const readBuffer: ArrayBuffer = new ArrayBuffer(size);
if (pixelMap) {
await pixelMap.readPixelsToBuffer(readBuffer);
let bufferSize = readBuffer.byteLength;
PiccLog.info("bufferSize = " + bufferSize);
return readBuffer;
}
return readBuffer;
}
arrayToPixelMap(readBuffer: ArrayBuffer | null, w:number, h:number, callback:(pixelMap:PixelMap)=>void){
let opts: image.InitializationOptions = { editable: true, pixelFormat: image.PixelMapFormat.BGRA_8888,
size: { height: h, width: w } }
image.createPixelMap(readBuffer, opts).then((pixelMap)=>{
callback(pixelMap);
});
}
rgba2BGRA(data: ArrayBuffer): ArrayBuffer {
let length: number = data.byteLength;
let tempBuffer: ArrayBuffer = new ArrayBuffer(length);
let rgbaData = new DataView(data);
let bgraData = new DataView(tempBuffer);
for (let i = 0; i < length; i += 4) {
bgraData.setUint8(i, rgbaData.getUint8(i + 2));
bgraData.setUint8(i + 1, rgbaData.getUint8(i + 1));
bgraData.setUint8(i + 2, rgbaData.getUint8(i));
bgraData.setUint8(i + 3, rgbaData.getUint8(i + 3));
}
return bgraData.buffer
}
arrayToBase64(data: ArrayBuffer){
let buf: buffer.Buffer = buffer.from(data);
// let base64 = 'data:image/jpeg;base64,' + buf.toString('base64', 0, buf.length);
let base64 = buf.toString('base64', 0, buf.length);
return base64;
}
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
怎么把PixelMap图片转BASE64
9640浏览 • 1回复 待解决
HarmonyOS pixelMap怎么转base64
52浏览 • 1回复 待解决
HarmonyOS 拍照后的图片转base64
138浏览 • 1回复 待解决
PixelMap怎么转Base64?(非Java)
3571浏览 • 2回复 待解决
HarmonyOS 图片转base64
364浏览 • 1回复 待解决
HarmonyOS 图片base64转码后乱码
240浏览 • 1回复 待解决
HarmonyOS 图片压缩和图片转base64
524浏览 • 1回复 待解决
验证pixelmap数据buffer转base64是否正常
2129浏览 • 1回复 待解决
如何将PixelMap转图片base64字符串?
812浏览 • 1回复 待解决
HarmonyOS base64编解码
283浏览 • 0回复 待解决
HarmonyOS base64解码报错
1326浏览 • 1回复 待解决
js canvas转base64编码图片不全
11062浏览 • 1回复 待解决
HarmonyOS 如何实现Base64数据转图片
192浏览 • 1回复 待解决
HarmonyOS如何将图片转Base64
1170浏览 • 1回复 待解决
如何将图片base64字符串转PixelMap?
930浏览 • 1回复 待解决
HarmonyOS base64转image
293浏览 • 1回复 待解决
如何base64转换成图片?
10584浏览 • 2回复 待解决
HarmonyOS base64解码,以及解码后如何加载到Image中
155浏览 • 1回复 待解决
HarmonyOS base64解码内容缺少
195浏览 • 1回复 待解决
照片文件转Base64
140浏览 • 1回复 待解决
HarmonyOS 录制的视频转base64
290浏览 • 1回复 待解决
HarmonyOS arraybuffer转base64乱码
343浏览 • 1回复 待解决
HarmonyOS 图片操作,合成后导出base64
378浏览 • 1回复 待解决
HarmonyOS 图片Base64编码
297浏览 • 1回复 待解决
HarmonyOS 如何将沙盒图片转位base64
302浏览 • 1回复 待解决
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-image-kit-V5