Fixed ScanQrCode from Image with RNQRGenerator

This commit is contained in:
2024-08-13 19:39:55 +08:00
parent 0f18b55aad
commit 22277e3a6d
3 changed files with 23 additions and 12 deletions

11
package-lock.json generated
View File

@@ -52,7 +52,8 @@
"react-native-vision-camera": "^4.5.1", "react-native-vision-camera": "^4.5.1",
"react-native-webview": "^13.8.6", "react-native-webview": "^13.8.6",
"react-redux": "^9.1.2", "react-redux": "^9.1.2",
"redux": "^5.0.1" "redux": "^5.0.1",
"rn-qr-generator": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.20.0", "@babel/core": "^7.20.0",
@@ -16660,6 +16661,14 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/rn-qr-generator": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/rn-qr-generator/-/rn-qr-generator-1.4.0.tgz",
"integrity": "sha512-L3HS1eahpAA3k2s/CGZOBuv3bELshodNHO/aw9tWVrbZagSXJ9BrDat/CUnDVNWjCl8/qt9Dv+8CYY2K1q4iMQ==",
"peerDependencies": {
"react-native": ">=0.55"
}
},
"node_modules/run-parallel": { "node_modules/run-parallel": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",

View File

@@ -56,7 +56,8 @@
"react-native-vision-camera": "^4.5.1", "react-native-vision-camera": "^4.5.1",
"react-native-webview": "^13.8.6", "react-native-webview": "^13.8.6",
"react-redux": "^9.1.2", "react-redux": "^9.1.2",
"redux": "^5.0.1" "redux": "^5.0.1",
"rn-qr-generator": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.20.0", "@babel/core": "^7.20.0",

View File

@@ -3,17 +3,13 @@ import { View, Text, StyleSheet, TouchableOpacity, Image, Dimensions, Modal } fr
import { Camera, useCameraDevice, useCameraPermission, useCodeScanner } from 'react-native-vision-camera'; import { Camera, useCameraDevice, useCameraPermission, useCodeScanner } from 'react-native-vision-camera';
import { Ionicons } from '@expo/vector-icons'; import { Ionicons } from '@expo/vector-icons';
import * as ImagePicker from 'expo-image-picker'; import * as ImagePicker from 'expo-image-picker';
import RNQRGenerator from 'rn-qr-generator';
import ScannedDataBox from '../components/ScannedDataBox'; import ScannedDataBox from '../components/ScannedDataBox';
import { scanQRCode } from '../api/qrCodeAPI'; import { scanQRCode } from '../api/qrCodeAPI';
import SettingsScreen from './SettingsScreen'; import SettingsScreen from './SettingsScreen';
import {scanFromURLAsync } from 'expo-camera';
const { width: screenWidth, height: screenHeight } = Dimensions.get('window'); const { width: screenWidth, height: screenHeight } = Dimensions.get('window');
const QRScannerScreen: React.FC = () => { const QRScannerScreen: React.FC = () => {
const [isSettingsModalVisible, setIsSettingsModalVisible] = useState<boolean>(false); const [isSettingsModalVisible, setIsSettingsModalVisible] = useState<boolean>(false);
const [enableTorch, setEnableTorch] = useState<boolean>(false); const [enableTorch, setEnableTorch] = useState<boolean>(false);
@@ -64,10 +60,15 @@ const QRScannerScreen: React.FC = () => {
if (result && result.assets && result.assets.length > 0 && result.assets[0].uri) { // Ensure the uri is not empty if (result && result.assets && result.assets.length > 0 && result.assets[0].uri) { // Ensure the uri is not empty
try { try {
const scannedResult = await scanFromURLAsync(result.assets[0].uri); const detectionResult = await RNQRGenerator.detect({
if (scannedResult && scannedResult[0] && scannedResult[0].data) { uri: result.assets[0].uri, // Local path of the image
handlePayload(scannedResult[0].data); });
console.log('QR code data from image:', scannedResult[0].data);
const { values } = detectionResult;
if (values.length > 0) {
handlePayload(values[0]); // Use the first detected QR code value
console.log('QR code data from image:', values[0]);
} else { } else {
console.log("No QR code found in the selected image"); console.log("No QR code found in the selected image");
} }