gpt4 book ai didi

javascript - 在 React Native 中从文件中读取 QRCode

转载 作者:行者123 更新时间:2023-12-05 07:29:31 26 4
gpt4 key购买 nike

如何在 React Native 中从文件路径(而不是相机)读取 QRCode?我正在使用 react-native v0.57.1​​

编辑 1:

在@joshkmartinez 的帮助下,我能够编写这个方法:

getImageInfo(path) {
return new Promise(resolve => {
Image.getSize(`file://${path}`, (width, height) => {
ImgToBase64.getBase64String(`file://${path}`).then(base64String => {
var raw = window.atob(base64String);
var rawLength = raw.length;
var imageData = new Uint8ClampedArray(new ArrayBuffer(rawLength));

for (var i = 0; i < rawLength; i++) {
imageData[i] = raw.charCodeAt(i);
}

resolve({
width,
height,
imageData,
});
});
});
})
}

并使用以下方式调用它:

 this.getImageInfo(path).then(imageInfo => {
jsQR(imageInfo.imageData, imageInfo.width, imageInfo.height).then(qrcode => {
console.log(qrcode);
});
});

但是 jsQR 返回错误 Malformed data passed to binarizer

也许我在将文件转换为 Base64 时做错了什么,我正在使用 react-native-image-base64转换图像

编辑 2:

经过 2 天的研究,我能够使用此方法转换图像 react-native-fs , Bufferjpeg-js :

decodeImageData(image) {
var imagePath = `${image.filePath}/${image.fileFullName}`;

return new Promise(resolve => {
RNFS.readFile(imagePath, 'base64').then(base64string => {
const imageData = Buffer.from(base64string, 'base64');

var rawImageData = JPEG.decode(imageData);

var clampedArray = new Uint8ClampedArray(rawImageData.data.length);
for (var i = 0; i < rawImageData.data.length; i++) {
clampedArray[i] = rawImageData.data[i];
}

resolve({
width: rawImageData.width,
height: rawImageData.height,
data: clampedArray,
});
});
});
}

才发现 jsQR 无法读取我的任何二维码(它只是向所有二维码返回 null)

我还遗漏了什么吗?可能在图像的转换、解码等方面?

最佳答案

起初我在使用 jsQR 时遇到了同样的问题。我的目标是从图库中选择的图像中检测二维码。

我通过使用“react-native-image-picker”和“rn-qr-generator”找到了解决方案。

// ... other imports ...
import { launchImageLibrary } from 'react-native-image-picker';
import RNQRGenerator from 'rn-qr-generator';

// ...

openQRCodeFromGallery() {
const galleryOptions = {
mediaType: 'photo',
includeBase64: true,
};

launchImageLibrary(galleryOptions, (response) => {
if (!response || response.didCancel || !response.base64) {
return;
}

const { base64 } = response;

RNQRGenerator.detect({
base64: base64,
})
.then((detectedQRCodes) => {
const { values } = detectedQRCodes; // Array of detected QR code values. Empty if nothing found.
// do your stuff
})
.catch((error) => {
// handle errors
});
});
}

使用的版本:

  • native react :0.63.4
  • rn-qr-generator: ^1.1.6
  • react-native-image-picker: ^3.3.2

关于javascript - 在 React Native 中从文件中读取 QRCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com