将本机base64映像反应到Uint8ClampedArray

时间:2020-07-13 04:01:15

标签: image react-native base64 qr-code uint8t

我具有从原生 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 生成图像。

感谢别人的帮助。 谢谢

1 个答案:

答案 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);