Я пытаюсь реализовать функцию в своем приложении, где пользователь может выбрать изображение из списка своих камер, и приложение будет декодировать QR-код в обнаруженном изображении.
В настоящее время я использую средство выбора реагирующей камеры: https://github.com/jeanpan/react-native-camera-roll-picker и response-native-qrcode-local-image: https://github.com/remobile/react-native-qrcode-local-image
Проблема заключается в том, что локальная библиотека изображений QR-кода требует, чтобы я пропустил локальный путь, и не совместима с нативным URI, предоставляемым реагирующим средством выбора камеры. Я бы использовал другую библиотеку для декодирования QR-кода изображения, но этот, похоже, единственный, который работает на iOS и Android и сканирует существующие изображения, а не реальную камеру.
Я также попытался реализовать response-native-fetch-blob, чтобы временно сохранить изображение с камеры, но это также доставляло мне проблемы: https://github.com/wkh237/react-native-fetch-blob
Это моя текущая попытка в функции, которую я вызываю в опоре "обратного вызова" для команды response-native-camera-roll-picker (с предыдущими попытками, закомментированными):
_pickedImage(array,currentImg) {
console.log(currentImg)
var path = RNFS.DocumentDirectoryPath + '/pickedqr';
let rnfbURI = RNFetchBlob.wrap(RNFetchBlob.fs.asset(currentImg.uri))
const Blob = RNFetchBlob.polyfill.Blob
Blob.build(rnfbURI, {type:'image/jpg'}).then((b) => {
tmpBlob = b;
RNFetchBlob.fs.readFile(tmpBlob, 'base64').then((data) => {
console.log("Base64", data)
QRDecoder.decode('data:image/gif;base64,${data}', (error, result)=>{
console.log("Code", result)
console.log("Error", error)
});
});
})
/*fullPath = currentImg.uri.replace("assets-library://", "cdvfile://localhost/assets-library/")
QRDecoder.decode(fullPath, (error, result)=>{
console.log("Code", result)
console.log("Error", error)
});*/
/*let blb = Blob.build( rnfbURI, { type: 'image/jpg'})
console.log(blb)*/
/*RNFetchBlob.fs.readFile(rnfbURI, 'base64').then((data) => {
console.log("Base64", data)
QRDecoder.decode('data:image/gif;base64,${data}', (error, result)=>{
console.log("Code", result)
console.log("Error", error)
});
})*/
}
В данный момент я в полной растерянности, поэтому любые методы или понимание будут высоко оценены.