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;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
HarmonyOS
赞
收藏 0
回答 1
相关问题
怎么把PixelMap图片转BASE64
10393浏览 • 1回复 待解决
HarmonyOS pixelMap怎么转base64
655浏览 • 1回复 待解决
HarmonyOS 拍照后的图片转base64
717浏览 • 1回复 待解决
HarmonyOS 图片转base64
954浏览 • 1回复 待解决
PixelMap怎么转Base64?(非Java)
4391浏览 • 2回复 待解决
HarmonyOS 图片base64转码后乱码
742浏览 • 1回复 待解决
HarmonyOS 图片压缩和图片转base64
1207浏览 • 1回复 待解决
验证pixelmap数据buffer转base64是否正常
2721浏览 • 1回复 待解决
如何将PixelMap转图片base64字符串?
1566浏览 • 1回复 待解决
HarmonyOS base64编解码
1022浏览 • 0回复 待解决
HarmonyOS base64解码报错
2004浏览 • 1回复 待解决
HarmonyOS 如何实现Base64数据转图片
943浏览 • 1回复 待解决
HarmonyOS如何将图片转Base64
1993浏览 • 1回复 待解决
如何将图片base64字符串转PixelMap?
1631浏览 • 1回复 待解决
js canvas转base64编码图片不全
12087浏览 • 1回复 待解决
HarmonyOS base64转image
783浏览 • 1回复 待解决
如何base64转换成图片?
11578浏览 • 2回复 待解决
HarmonyOS base64解码内容缺少
637浏览 • 1回复 待解决
照片文件转Base64
643浏览 • 1回复 待解决
HarmonyOS base64解码,以及解码后如何加载到Image中
680浏览 • 1回复 待解决
HarmonyOS arraybuffer转base64乱码
903浏览 • 1回复 待解决
HarmonyOS 录制的视频转base64
898浏览 • 1回复 待解决
HarmonyOS 图片操作,合成后导出base64
1028浏览 • 1回复 待解决
HarmonyOS 如何将沙盒图片转位base64
1012浏览 • 1回复 待解决
HarmonyOS 图片Base64编码
847浏览 • 1回复 待解决
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-image-kit-V5