Melden

iOS QR Code aus Bild lesen – Tutorial

Einleitung

Das Scannen und Auslesen von QR-Codes ist in iOS-Geräten mittlerweile fest integriert, im Rahmen von Kamera-Apps oder speziellen Bibliotheken. Das direkte Auslesen eines QR-Codes aus einem Bild, das sich beispielsweise in der Fotobibliothek befindet, erfordert allerdings spezielle Programmierung, da iOS keine Standard-UI bereitstellt, um QR-Codes aus gespeicherten Bildern automatisch zu erkennen. In dieser Erklärung wird beschrieben, wie man in einer iOS-App QR-Codes aus einem ausgewählten Bild ausliest.

Grundlagen der QR-Code-Erkennung auf iOS

Apple stellt mit dem Framework Vision ab iOS 11 leistungsstarke Funktionen zur Bilderkennung zur Verfügung. Diese Funktionen umfassen auch die Erkennung von Barcode-Typen, darunter QR-Codes. Das Framework analysiert per Bildverarbeitung die Pixel eines Bildes und kann darin enthaltene QR-Codes auslesen und dekodieren.

Alternativ gibt es die Möglichkeit, AVFoundation für Live-Video-Decodierung zu verwenden, jedoch ist dies für statische Bilder eher nicht passend. Somit ist Vision die bevorzugte Lösung.

Vorgehensweise zum Auslesen eines QR-Codes aus einem Bild

Der Ablauf gliedert sich typischerweise in folgende Schritte. Zunächst muss der Nutzer ein Bild auswählen oder das Bild anderweitig bereitgestellt werden. Anschließend wird dieses Bild in einem Format, das Vision versteht, verarbeitet. Dann startet eine Bildanalyse, um einen QR-Code zu finden. Gefundene QR-Code-Daten werden schließlich extrahiert und können weiterverwendet werden.

Bild aus Fotobibliothek auswählen

Mit UIImagePickerController (alternativ mit aktuellen modernen APIs wie PHPickerViewController) kann der Nutzer ein Bild aus seiner Fotobibliothek auswählen. Das ausgewählte Bild liegt dann als UIImage vor. Dieses Bild ist jedoch noch nicht direkt geeignet für Vision. Man konvertiert es in ein CIImage, das Core Image-kompatibel ist und andererseits von Vision analysiert werden kann.

Einrichten der Vision-Anfrage zur Barcode-Erkennung

Für die Erkennung von QR-Codes wird eine VNDetectBarcodesRequest (in älteren iOS-Versionen VNDetectBarcodesRequest) erstellt. Diese Anfrage wird einem VNImageRequestHandler übergeben, der das Bild analysiert. Man kann die Erkennung auf den QR-Code-Typ beschränken, damit andere Barcode-Typen ignoriert werden.

Verarbeitung der Erkennungsergebnisse

Die Ergebnisse der Vision-Anfrage liefern eine Liste von erkannten Barcodes (in Form von VNBarcodeObservation). Jedes Ergebnis enthält den dekodierten String, falls vorhanden, sowie Informationen zur Position im Bild. Daraus kann man dann den Text extrahieren, der im QR-Code kodiert war, z.B. eine URL oder eine einfache Nachricht.

Beispiel-Code (Swift)

import UIKitimport Visionfunc qrCodeErkennen(im image: UIImage, completion: @escaping (String?) -> Void) { guard let ciImage = CIImage(image: image) else { completion(nil) return } let barcodeRequest = VNDetectBarcodesRequest { request, error in if error != nil { completion(nil) return } guard let results = request.results as?   else { completion(nil) return } for result in results { if result.symbology == .QR, let payload = result.payloadStringValue { completion(payload) return } } completion(nil) // Kein QR-Code gefunden } // Auf QR-Code beschränken (optional) barcodeRequest.symbologies =   let handler = VNImageRequestHandler(ciImage: ciImage, options:  ) DispatchQueue.global(qos: .userInitiated).async { do { try handler.perform( ) } catch { completion(nil) } }}

Erweiterungen und wichtige Hinweise

Das gezeigte Beispiel prüft nur auf einen QR-Code und liefert den ersten gefundenen Wert zurück. In realen Apps kann die Benutzerführung so gestaltet werden, dass der Nutzer ein Bild auswählt, danach die Erkennung gestartet wird, und das Ergebnis visuell oder als Text angezeigt wird. Empfehlenswert ist es, auch Fehlerfälle wie kein QR-Code im Bild oder Berechtigungsverweigerung für Fotobibliothek abzudecken.

Seit iOS 14 bietet PHPickerViewController eine moderne und datenschutzfreundliche Methode, Bilder auszuwählen. Außerdem kann man die Erkennung bei mehreren QR-Codes erweitern, indem man alle VNBarcodeObservation-Ergebnisse iteriert und alle Payloads extrahiert.

Fazit

Das Auslesen eines QR-Codes aus einem statischen Bild auf iOS erfordert etwas Programmieraufwand mit Frameworks wie Vision für die Bildanalyse. Durch Auswahl eines Bildes aus der Fotobibliothek und anschließende Barcode-Erkennung können QR-Codes zuverlässig entdeckt und deren Inhalt ausgelesen werden. Der vorgestellte Ansatz ist aktuell, leistungsfähig und eignet sich gut für eigene Apps und Projekte.

0
0 Kommentare