How to Read QR Codes from Images in C

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronQR umożliwia programistom odczyt kodów QR z różnych formatów obrazów w C# poprzez ładowanie obrazów z IronDrawing, tworzenie obiektu QrImageInput i użycie metody BarcodeReader.Read w celu efektywnego dekodowania danych QR.

Quickstart: Odczytaj kod QR z obrazu w C#

Jak odczytać kody QR z różnych formatów obrazów?

IronQR zapewnia wbudowane wsparcie dla odczytywania kodów QR z różnych formatów obrazów. Ta funkcjonalność wykorzystuje zaawansowane modele uczenia maszynowego, aby zapewnić dokładne dekodowanie w różnych formatach mediów. Obsługiwane formaty to:

  • Joint Photographic Experts Group (JPEG)
  • Portable Network Graphics (PNG)
  • Graphics Interchange Format (GIF)
  • Format plików graficznych z tagami (TIFF)
  • Plik obrazu bitmapowego (BMP)
  • WBMP
  • WebP
  • Icon (ico)
  • WMF
  • RawFormat (raw)

Wsparcie dla tego formatu jest umożliwiane przez bibliotekę open-source IronDrawing, która efektywnie przetwarza obrazy. Można przetwarzać kody QR z aparatów cyfrowych, skanerów, urządzeń mobilnych lub pobrań sieciowych bez konwersji formatu.

Przykładowy kod QR z wyraźnym czarno-białym wzorem pokazującym kwadraty pozycjonujące i moduły danych do testowania skanowania obrazu
  1. Install IronQR with NuGet Package Manager

    PM > Install-Package IronQR
  2. Skopiuj i uruchom ten fragment kodu.

    // Import necessary IronQR and IronDrawing namespaces
    using IronSoftware.Drawing; 
    using IronBarcode;
    
    public class QRCodeReader
    {
        public static void Main()
        {
            // Load an image from a file path
            using (var inputImage = Image.FromFile("path/to/your/image/file.webp"))
            {
                // Create a QrImageInput object from the image
                var qrImageInput = new QrImageInput(inputImage);
    
                // Decode the QR code from the image
                var result = BarcodeReader.Read(qrImageInput);
    
                // Iterate through each detected QR code and display its information
                foreach (var barcodeResult in result.Barcodes)
                {
                    Console.WriteLine($"QR Code Data: {barcodeResult.Value}");
                }
            }
        }
    }
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronQR w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Uwaga: Zastąp "path/to/your/image/file.webp" rzeczywistą ścieżką do pliku obrazu z kodem QR.

Ciekawy, jaka jest wartość kodu QR w przykładowych obrazach? Wypróbuj, używając fragmentu kodu!

Dlaczego IronQR obsługuje wiele formatów obrazów?

Odczyt kodu QR odnosi się do skanowania i dekodowania informacji przechowywanych w kodzie QR. Zazwyczaj odbywa się to za pomocą kamery lub skanera połączonego z oprogramowaniem, które może interpretować dane z kodu QR. Informacje w kodzie QR mogą być tekstem, adresami URL, danymi kontaktowymi lub innymi formami danych.

Wsparcie IronQR dla wielu formatów jest kluczowe dla zastosowań w rzeczywistym świecie, gdzie kody QR pojawiają się w różnych kontekstach — od materiałów marketingowych i opakowań produktów po dokumenty cyfrowe i treści webowe. Obsługując różnorodne formaty, IronQR zapewnia, że programiści mogą budować solidne aplikacje bez martwienia się o kompatybilność formatu obrazów. Dowiedz się więcej o możliwościach odczytu IronQR, aby zrozumieć, jak ta elastyczność usprawnia Twój proces tworzenia oprogramowania.

Kiedy powinienem używać każdego formatu obrazu?

Różne formaty obrazów służą różnym celom w przetwarzaniu kodów QR:

  • PNG: Najlepszy do kodów QR wymagających przeźroczystości lub gdy jakość obrazu jest kluczowa. Bezstratna kompresja PNG zapewnia, że wzory kodów QR pozostają ostre i czytelne.
  • JPEG: Idealne do zdjęć zawierających kody QR lub gdy rozmiar pliku ma znaczenie. Używaj wyższych ustawień jakości (80%+) aby zapobiec wpływowi artefaktów kompresji na czytelność.
  • TIFF: Doskonałe do celów archiwalnych lub do pracy z zeskanowanymi dokumentami w środowiskach korporacyjnych.
  • WebP: Nowoczesny format oferujący doskonałą kompresję zachowując jakość, idealny do aplikacji webowych.

Dla optymalnych wyników z dowolnym formatem, upewnij się, że Twoje obrazy mają wystarczającą rozdzielczość (przynajmniej 300 DPI dla drukowanych kodów QR) i kontrast. Sprawdź nasze zaawansowane przykłady odczytu QR dla technik optymalizacji specyficznych dla formatów.

Co się dzieje, jeśli jakość obrazu jest niska?

IronQR obejmuje funkcje tolerancji błędów, aby radzić sobie z niedoskonałymi obrazami. Gdy masz do czynienia z obrazami niskiej jakości, biblioteka stosuje kilka strategii:

  1. Korekcja błędów: Kody QR zawierają możliwości korekcji błędów (poziomy L, M, Q, H), pozwalając na odzyskiwanie danych nawet gdy do 30% kodu jest uszkodzone
  2. Wzmocnienie przez Uczenie Maszynowe: Modele ML IronQR wykrywają i kompensują powszechne problemy takie jak rozmycie, zniekształcenie i słabe oświetlenie
  3. Przetwarzanie wstępne: Automatyczne polepszanie obrazów poprawia kontrast i ostrość przed próbami dekodowania

Dla trudnych scenariuszy, rozważ użycie opcji niestandardowego trybu odczytu QR, aby dostroić proces odczytu:

// Example: Reading QR codes with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on QR codes only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
// Example: Reading QR codes with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on QR codes only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
Imports IronBarcode
Imports System.Drawing

Public Class EnhancedQRReader
    Public Shared Sub ReadPoorQualityImage()
        ' Configure reader with multiple attempts and error correction
        Dim options As New BarcodeReaderOptions With {
            .Speed = ReadingSpeed.Detailed, ' More thorough scanning
            .ExpectMultipleBarcodes = True,  ' Check for multiple codes
            .ExpectBarcodeTypes = BarcodeType.QRCode ' Focus on QR codes only
        }

        Using inputImage As Image = Image.FromFile("blurry_qr_code.jpg")
            Dim qrImageInput As New QrImageInput(inputImage)
            Dim results = BarcodeReader.Read(qrImageInput, options)

            For Each result In results.Barcodes
                Console.WriteLine($"Decoded: {result.Value}")
                Console.WriteLine($"Confidence: {result.Confidence}%")
            Next
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Pobieranie wartości z kodu QR

Większość funkcji IronQR zwraca kolekcję, aby obsłużyć wiele wykryć. Ponieważ results to sekwencja obiektów, sama nie ma właściwości Value. Przykładowy kod wybiera konkretnie pierwszy QrResult z kolekcji i pobiera jego wartość.

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-value.cs
using System;
using System.Collections.Generic;
using System.Linq;
using IronQr;
using System.Drawing;

// Import image
var inputImage = Image.FromFile("sample.jpg");

// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
QrReader reader = new QrReader();

// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// Display the value of the first QR code found
Console.WriteLine($"QR code value is {results.First().Value}");
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronQr
Imports System.Drawing

' Import image
Dim inputImage As Image = Image.FromFile("sample.jpg")

' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(inputImage)

' Create a QR Reader object
Dim reader As New QrReader()

' Read the Input and get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

' Display the value of the first QR code found
Console.WriteLine($"QR code value is {results.First().Value}")
$vbLabelText   $csharpLabel

Wykrywanie pozycji kodu QR w obrazie

IronQR idzie poza proste dekodowanie, aby dokładnie zlokalizować miejsce, gdzie kod QR znajduje się w obrębie obrazu. To pozycjonowanie odbywa się przy użyciu standardowego systemu współrzędnych, gdzie PointF (0,0) oznacza lewy górny róg obrazu. Dokładne współrzędne przestrzenne narożników kodu QR są dostępne poprzez tablicę Points[].

W przykładzie współrzędne dla wszystkich czterech punktów wykrytego kodu QR są pobierane i drukowane na konsoli.

Zwróć uwagęWspółrzędne zwracane przez tę funkcję są przechowywane w ścisłej sekwencji "zygzak": lewy-górny, prawy-górny, lewy-dolny, a na końcu prawy-dolny

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-position.cs
using System;
using System.Collections.Generic;
using IronQr;
using System.Drawing;
using System.Linq;

// Import an image containing a QR code
var inputImage = Image.FromFile("urlQr.png");

// Load the asset into a QrImageInput object
var imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
var reader = new QrReader();

// Read the input and get all embedded QR codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// [TL, TR, BL, BR]
string[] labels = { "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" };

var points = results.First().Points;

for (int i = 0; i < points.Length; i++)
{
    Console.WriteLine($"{labels[i]}: {points[i].X}, {points[i].Y}");
}
Imports System
Imports System.Collections.Generic
Imports IronQr
Imports System.Drawing
Imports System.Linq

' Import an image containing a QR code
Dim inputImage As Image = Image.FromFile("urlQr.png")

' Load the asset into a QrImageInput object
Dim imageInput As New QrImageInput(inputImage)

' Create a QR Reader object
Dim reader As New QrReader()

' Read the input and get all embedded QR codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)

' [TL, TR, BL, BR]
Dim labels As String() = { "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" }

Dim points = results.First().Points

For i As Integer = 0 To points.Length - 1
    Console.WriteLine($"{labels(i)}: {points(i).X}, {points(i).Y}")
Next
$vbLabelText   $csharpLabel

Wprowadź kod QR

Kod QR

Wynik

Zwróć uwagę, że system zapisał w konsoli dokładne współrzędne przestrzenne każdego rogu kodu QR.

Wykrywanie krawędzi QR

Obsługiwane typy kodów QR

Obsługiwanych jest wiele typów kodów QR, zarówno do tworzenia, jak i odczytu. IronQR zapewnia kompleksową obsługę różnych formatów kodów QR, aby sprostać różnorodnym potrzebom aplikacji. Więcej informacji na temat obsługiwanych formatów QR można znaleźć w naszej dokumentacji. Poniżej przedstawiono obsługiwane typy kodów QR:

  • QRCode: Standardowy kod QR najczęściej używany obecnie. Może przechowywać do 7089 znaków numerycznych lub 4296 znaków alfanumerycznych, dzięki czemu nadaje się do adresów URL stron internetowych, danych kontaktowych i innych zastosowań.
Przykładowy kod QR z wyraźnym czarno-białym wzorem pokazującym kwadraty pozycjonujące i moduły danych do testowania skanowania obrazu
  • MicroQRCode: Mniejsza wersja standardowego kodu QR przeznaczona do zastosowań w ograniczonej przestrzeni. Może pomieścić do 35 znaków numerycznych lub 21 znaków alfanumerycznych, co idealnie nadaje się do małych opakowań lub niewielkich etykiet drukowanych.
Standardowy kod QR z wzorami lokalizacyjnymi i modułami danych ilustrującymi typową strukturę kodu QR
  • RMQRCode: KodRMQR(RectangularMicro QRCode) to kompaktowa wersja prostokątna, a nie kwadratowa. Ta wersja pozwala na elastyczność w zakresie proporcji obrazu, co jest przydatne w aplikacjach, w których dostępna jest prostokątna przestrzeń.
Przykład prostokątnego kodu QR przedstawiający format inny niż kwadratowy ze standardowymi znacznikami pozycjonowania i wzorami danych

Jak wybrać odpowiedni typ kodu QR?

Wybór odpowiedniego typu kodu QR zależy od konkretnego przypadku użycia i ograniczeń:

  • Standardowy kod QR: Wybierz tę opcję do zastosowań ogólnych, gdzie przestrzeń nie jest ograniczona, a potrzebna jest maksymalna pojemność danych. Idealne rozwiązanie dla adresów URL, danych logowania do sieci Wi-Fi, kontaktów vCard lub szczegółowych informacji o produktach. Zobacz nasze przykłady generowania kodów QR, aby poznać szczegóły wdrożenia.

  • Mikro kod QR: Idealny do pracy z małymi powierzchniami, takimi jak elementy elektroniczne, zawieszki do biżuterii lub urządzenia medyczne. Pomimo ograniczonej wydajności, idealnie nadaje się do numerów seryjnych, prostych adresów URL lub podstawowych kodów śledzenia.

  • Kod RMQR: Wybierz kody prostokątne, gdy dostępna przestrzeń ma określone ograniczenia wymiarowe, takie jak wąskie etykiety na produktach cylindrycznych lub wydłużone przestrzenie na krawędziach opakowań.

Jakie są ograniczenia dotyczące przechowywania danych?

Zrozumienie pojemności danych pomaga zoptymalizować wdrożenie kodu QR:

Typ kodu QR Tylko liczby Alfanumeryczny Binary Kanji
Standardowy kod QR 7 089 4 296 2 953 1 817
Micro QR 35 21 15 9
RMQR Zmienna Zmienna Zmienna Zmienna

Podczas planowania przechowywania danych należy wziąć pod uwagę następujące czynniki:

  • Używaj skracaczy adresów URL dla linków internetowych, aby maksymalnie wykorzystać dostępną przestrzeń
  • Wprowadź kompresję danych dla dużych zbiorów danych
  • Wybierz odpowiedni poziom korekty błędów (wyższy poziom korekty zmniejsza wydajność)

W przypadku zaawansowanych wdrożeń zapoznaj się z naszym przewodnikiem po generowaniu stylizowanych kodów QR, aby zachować równowagę między estetyką a pojemnością danych.

Kiedy należy używać kodów Micro lub RMQR?

Kody Micro iRMQRsprawdzają się doskonale w określonych sytuacjach:

Mikro kody QR idealnie nadają się do:

  • Płytki obwodów elektronicznych wymagające śledzenia komponentów
  • Małe urządzenia medyczne wymagające identyfikatorów pacjentów lub leków
  • Autentyfikacja biżuterii przy ograniczonej przestrzeni na grawerunek
  • Miniaturowe etykiety produktów w produkcji

KodyRMQRnajlepiej sprawdzają się w przypadku:

  • Wąskie etykiety wysyłkowe na rurach lub przewodach
  • Wydłużone przestrzenie na korpusach długopisów lub narzędziach
  • Materiały marketingowe w stylu banerów
  • Integracja z istniejącymi prostokątnymi elementami projektu

Oto praktyczny przykład odczytu różnych typów kodów QR:

using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all Kod QR types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all Kod QR types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
Imports IronBarcode
Imports IronSoftware.Drawing

Public Class MultiTypeQRReader
    Public Shared Sub ReadVariousQRTypes()
        ' Configure reader to handle all Kod QR types
        Dim options As New BarcodeReaderOptions With {
            .ExpectBarcodeTypes = BarcodeType.QRCode Or
                                  BarcodeType.MicroQRCode Or
                                  BarcodeType.RectangularMicroQRCode
        }

        Dim imagePaths As String() = {
            "standard_qr.png",
            "micro_qr.png",
            "rectangular_qr.png"
        }

        For Each path In imagePaths
            Using image = Image.FromFile(path)
                Dim qrInput As New QrImageInput(image)
                Dim results = BarcodeReader.Read(qrInput, options)

                For Each qr In results.Barcodes
                    Console.WriteLine($"Type: {qr.BarcodeType}")
                    Console.WriteLine($"Data: {qr.Value}")
                    Console.WriteLine($"Format: {qr.Format}")
                    Console.WriteLine("---")
                Next
            End Using
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

W przypadku wdrożeń produkcyjnych zapoznaj się z naszym przewodnikiem po pakietach NuGet, aby upewnić się, że masz odpowiedni pakiet dla swojej platformy, oraz sprawdź Dokumentację API, aby uzyskać wyczerpujące informacje na temat wszystkich dostępnych metod i właściwości.

Często Zadawane Pytania

Jakie formaty obrazów obsługuje IronQR do odczytywania kodów QR?

IronQR obsługuje odczyt kodów QR z wielu formatów obrazów, w tym JPEG, PNG, GIF, TIFF, BMP, WBMP, WebP, ICO, WMF i RawFormat. To kompleksowe wsparcie formatów jest możliwe dzięki IronDrawing, pozwalając na przetwarzanie kodów QR z różnych źródeł bez konwersji formatu.

Jak odczytać kod QR z pliku graficznego w języku C#?

Aby odczytać kod QR za pomocą IronQR, najpierw załaduj obraz za pomocą Image.FromFile(), utwórz obiekt QrImageInput na podstawie załadowanego obrazu, a następnie użyj BarcodeReader.Read(), aby zdekodować dane QR. Metoda zwraca wyniki, które można przeglądać, aby uzyskać dostęp do informacji o każdym wykrytym kodzie QR.

Jaka technologia umożliwia dokładne odczytywanie kodów QR w różnych typach nośników?

IronQR wykorzystuje zaawansowane modele uczenia maszynowego, aby zapewnić dokładne dekodowanie kodów QR w różnych typach mediów i formatach obrazów. To oparte na sztucznej inteligencji podejście pomaga zachować wysoką dokładność nawet w trudnych warunkach obrazu.

Czy mogę odczytać wiele kodów QR z jednego obrazu?

Tak, IronQR może wykrywać i odczytywać wiele kodów QR z jednego obrazu. Metoda BarcodeReader.Read zwraca zbiór wyników, umożliwiając iterację przez każdy wykryty kod QR za pomocą pętli foreach w celu uzyskania dostępu do danych poszczególnych kodów QR.

Jakie rodzaje danych można przechowywać w kodach QR odczytywanych przez IronQR?

IronQR może dekodować różne typy danych przechowywanych w kodach QR, w tym zwykły tekst, adresy URL, dane kontaktowe i inne formy danych ustrukturyzowanych. Dostęp do zdekodowanych informacji można uzyskać poprzez właściwość Value każdego obiektu BarcodeResult.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 63,676 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronQR
uruchom próbkę obserwuj, jak Twój URL staje się kodem QR.