我具有从原生的 Android 和 iOS 的CameraRoll中选择 QRcode 图像的功能。然后用户选择了图像我将使用诸如jsQR之类的东西对其进行解码,并验证其是否为真实的qr代码。
但是在 jsQR lib上,他们说他们需要接受 Uint8ClampedArray 来解码图像并读取qr。所以我已经有了获取base64映像的功能。但是找不到如何将其正确转换为 Uint8ClampedArray 。
以下是我的代码:
const handleImportScan = useCallback(async () => {
try {
const base64Image = await RNFS.readFile(
photos[selected].node.image.uri,
'base64',
);
console.log('base64img:', base64Image);
// First argument below should be a 'Uint8ClampedArray'
const code = jsQR(base64Image, width, height);
if (code) {
console.log('Found QR code', code);
}
} catch (error) {
console.log('err:', error);
}
}, [photos, selected]);
我正在尝试找到一个库或第三方,以将我的 base64 图像转换为 Uint8ClampedArray
大多数情况下,我保存用户使用 PNG 生成图像。
感谢别人的帮助。 谢谢
答案 0 :(得分:0)
请注意,base64data应该是base64编码的映像,而不是uri。 (例如,如果没有uri,则不带“ data:image / png; base64”)
const byteCharacters = atob(base64data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8ClampedArray(byteNumbers);