Zum Fußzeileninhalt springen
IRONBARCODE VERWENDEN

Wie man eine Barcode Scanner API in C# mit IronBarcode erstellt

Der Aufbau einer C#-Scanner-API in .NET erforderte traditionell eine komplexe Scanner-SDK-Integration oder eingeschränkte Softwarebibliotheken. Mit IronBarcode können Entwickler in wenigen Minuten eine leistungsstarke, für die Produktion bereite Barcode-Scanner-API erstellen. Diese können problemlos Barcode-Daten aus Bildern, PDFs und sogar beschädigten Scaneingaben verarbeiten.

Dieses Tutorial zeigt, wie man eine RESTful Scanner-API mit ASP.NET Core unter Windows erstellt, die eine skalierbare Alternative zu Hardware-Scannern bietet und gleichzeitig Genauigkeit auf Unternehmensebene gewährleistet. Die API kann mehrere Scannertypen handhaben, mit Binärdaten arbeiten und Barcode-Werte aus jedem unterstützten Matrix- oder Tabellenformat extrahieren.

Wie installiere und richte ich IronBarcode ein?

Der Einstieg in IronBarcode ist so einfach wie das Installieren eines einzigen NuGet-Pakets. Öffnen Sie Ihr ASP.NET Core-Projekt und führen Sie diesen Befehl in der Paket-Manager-Konsole aus:

Install-Package BarCode

Nach der Installation fügen Sie den IronBarcode-Namespace zu Ihrem Controller hinzu und testen die Bibliothek mit diesem einzeiligen Beispiel:

using IronBarCode;
// Simple test to verify installation
var result = BarcodeReader.Read("test-barcode.png");
Console.WriteLine($"Scanned: {result.First().Value}");
using IronBarCode;
// Simple test to verify installation
var result = BarcodeReader.Read("test-barcode.png");
Console.WriteLine($"Scanned: {result.First().Value}");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieser Code liest ein Barcode-Bild und gibt dessen Wert aus. Die Methode BarcodeReader.Read() erkennt automatisch das Barcode-Format und gibt eine Ergebnissammlung zurück, was das Extrahieren von Barcode-Daten aus allen unterstützten Bildern (jpeg, bmp, png, tiff) und die Arbeit mit Array- oder Binärdatenformaten unglaublich einfach macht.

Wie kann ich einen vollständigen Scanner-API-Controller erstellen?

Das Erstellen einer Scanner-API mit ASP.NET Core umfasst das Einrichten eines Controllers mit Parametern, die verschiedene Eingabequellen akzeptieren. Hier ist eine vollständige Implementierung:

using Microsoft.AspNetCore.Mvc;
using IronBarCode;
using System.Drawing;
namespace BarcodeScannerAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ScannerController : ControllerBase
    {
        // Model for API responses
        public class ScanResult
        {
            public bool Success { get; set; }
            public List<string> BarcodeValues { get; set; } = new List<string>();
            public string BarcodeFormat { get; set; }
            public string ErrorMessage { get; set; }
        }
        [HttpPost("scan-file")]
        public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file)
        {
            if (file == null || file.Length == 0)
                return BadRequest(new ScanResult
                {
                    Success = false,
                    ErrorMessage = "No file uploaded"
                });
            try
            {
                using var stream = new MemoryStream();
                await file.CopyToAsync(stream);
                // Configure scanner options for better accuracy
                var options = new BarcodeReaderOptions
                {
                    Speed = ReadingSpeed.Balanced,
                    ExpectMultipleBarcodes = true,
                    ExpectBarcodeTypes = BarcodeEncoding.All
                };
                // Read barcodes from the uploaded file
                var results = BarcodeReader.Read(stream.ToArray(), options);
                if (results.Any())
                {
                    return Ok(new ScanResult
                    {
                        Success = true,
                        BarcodeValues = results.Select(r => r.Value).ToList(),
                        BarcodeFormat = results.First().BarcodeType.ToString()
                    });
                }
                return Ok(new ScanResult
                {
                    Success = false,
                    ErrorMessage = "No barcodes found"
                });
            }
            catch (Exception ex)
            {
                return StatusCode(500, new ScanResult
                {
                    Success = false,
                    ErrorMessage = $"Processing error: {ex.Message}"
                });
            }
        }
        [HttpPost("scan-base64")]
        public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image)
        {
            try
            {
                // Convert Base64 string to byte array
                byte[] imageBytes = Convert.FromBase64String(base64Image);
                // Process with IronBarcode
                var results = BarcodeReader.Read(imageBytes);
                return ProcessResults(results);
            }
            catch (Exception ex)
            {
                return BadRequest(new ScanResult
                {
                    Success = false,
                    ErrorMessage = $"Invalid Base64 data: {ex.Message}"
                });
            }
        }
        private ScanResult ProcessResults(BarcodeResults results)
        {
            if (results.Any())
            {
                return new ScanResult
                {
                    Success = true,
                    BarcodeValues = results.Select(r => r.Value).ToList(),
                    BarcodeFormat = results.First().BarcodeType.ToString()
                };
            }
            return new ScanResult
            {
                Success = false,
                ErrorMessage = "No barcodes detected"
            };
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using IronBarCode;
using System.Drawing;
namespace BarcodeScannerAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ScannerController : ControllerBase
    {
        // Model for API responses
        public class ScanResult
        {
            public bool Success { get; set; }
            public List<string> BarcodeValues { get; set; } = new List<string>();
            public string BarcodeFormat { get; set; }
            public string ErrorMessage { get; set; }
        }
        [HttpPost("scan-file")]
        public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file)
        {
            if (file == null || file.Length == 0)
                return BadRequest(new ScanResult
                {
                    Success = false,
                    ErrorMessage = "No file uploaded"
                });
            try
            {
                using var stream = new MemoryStream();
                await file.CopyToAsync(stream);
                // Configure scanner options for better accuracy
                var options = new BarcodeReaderOptions
                {
                    Speed = ReadingSpeed.Balanced,
                    ExpectMultipleBarcodes = true,
                    ExpectBarcodeTypes = BarcodeEncoding.All
                };
                // Read barcodes from the uploaded file
                var results = BarcodeReader.Read(stream.ToArray(), options);
                if (results.Any())
                {
                    return Ok(new ScanResult
                    {
                        Success = true,
                        BarcodeValues = results.Select(r => r.Value).ToList(),
                        BarcodeFormat = results.First().BarcodeType.ToString()
                    });
                }
                return Ok(new ScanResult
                {
                    Success = false,
                    ErrorMessage = "No barcodes found"
                });
            }
            catch (Exception ex)
            {
                return StatusCode(500, new ScanResult
                {
                    Success = false,
                    ErrorMessage = $"Processing error: {ex.Message}"
                });
            }
        }
        [HttpPost("scan-base64")]
        public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image)
        {
            try
            {
                // Convert Base64 string to byte array
                byte[] imageBytes = Convert.FromBase64String(base64Image);
                // Process with IronBarcode
                var results = BarcodeReader.Read(imageBytes);
                return ProcessResults(results);
            }
            catch (Exception ex)
            {
                return BadRequest(new ScanResult
                {
                    Success = false,
                    ErrorMessage = $"Invalid Base64 data: {ex.Message}"
                });
            }
        }
        private ScanResult ProcessResults(BarcodeResults results)
        {
            if (results.Any())
            {
                return new ScanResult
                {
                    Success = true,
                    BarcodeValues = results.Select(r => r.Value).ToList(),
                    BarcodeFormat = results.First().BarcodeType.ToString()
                };
            }
            return new ScanResult
            {
                Success = false,
                ErrorMessage = "No barcodes detected"
            };
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Dieser Controller bietet zwei Endpunkte: einen für Datei-Uploads und einen anderen für Base64-codierte Bilder. Der ScanFile-Endpunkt akzeptiert Multipart-Formulardaten, was ihn ideal für Webanwendungen macht, bei denen Benutzer Bilder direkt hochladen. Die Stream-Verarbeitung sorgt für eine effiziente Speichernutzung, während die BarcodeReaderOptions-Konfiguration ein Gleichgewicht zwischen Geschwindigkeit und Genauigkeit bietet.

Der ScanBase64-Endpunkt behandelt Szenarien, in denen Bilder als Base64-Zeichenfolgen übertragen werden, was in mobilen Anwendungen und API-to-API-Kommunikationen Standard ist. Er kann sowohl 1D- als auch 2D- (Matrix-)Barcodes aus hochgeladenen Bildern oder Streams lesen.

Ausgabe

Zuerst verwenden wir Swagger, um unsere Endpunkte zu testen. Hier können Sie die Scanner-API-Endpunkte sehen:

So erstellen Sie eine Barcode-Scanner-API in C# mit IronBarcode: Abbildung 1 - Swagger UI mit unseren API-Endpunkten

Lassen Sie uns diese nun testen und die Ausgabe überprüfen. Für dieses Beispiel verwende ich ein Beispiel-Barcode-Bild, das mit einem einfachen Zeichenfolgenwert "Hello World" codiert ist. Wie Sie hier sehen können, hat unser Programm den Barcode korrekt gescannt und die darin enthaltenen Daten abgerufen.

So erstellen Sie eine Barcode-Scanner-API in C# mit IronBarcode: Abbildung 2 - Einfache gescannte Barcode-Ausgabe

Welche verschiedenen Eingabequellen kann der Scanner verarbeiten?

Die Flexibilität von IronBarcode zeigt sich besonders bei der Verarbeitung verschiedener Eingabeformate. Neben Standardbildern verarbeitet die Scanner-API PDFs, Upload-Streams und mehrere Grafikformate:

// Scanning PDFs with multiple pages
[HttpPost("scan-pdf")]
public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile
{
    using var stream = new MemoryStream();
    await pdfFile.CopyToAsync(stream);
    // ReadPdf method handles multi-page documents
    var results = BarcodeReader.ReadPdf(stream.ToArray());
    return ProcessResults(results);
}
// Processing from URL
[HttpPost("scan-url")]
public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl)
{
    using var client = new HttpClient();
    var imageBytes = await client.GetByteArrayAsync(imageUrl);
    var results = BarcodeReader.Read(imageBytes);
    return ProcessResults(results);
}
// Scanning PDFs with multiple pages
[HttpPost("scan-pdf")]
public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile
{
    using var stream = new MemoryStream();
    await pdfFile.CopyToAsync(stream);
    // ReadPdf method handles multi-page documents
    var results = BarcodeReader.ReadPdf(stream.ToArray());
    return ProcessResults(results);
}
// Processing from URL
[HttpPost("scan-url")]
public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl)
{
    using var client = new HttpClient();
    var imageBytes = await client.GetByteArrayAsync(imageUrl);
    var results = BarcodeReader.Read(imageBytes);
    return ProcessResults(results);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Die ReadPdf-Methode scannt automatisch alle Seiten eines PDF-Dokuments und extrahiert Barcodes aus Versandetiketten, Rechnungen oder mehrseitigen Berichten. Für das URL-basierte Scannen ruft die API Remote-Bilder ab und verarbeitet sie, ohne lokalen Speicherplatz zu benötigen, ideal für die Integration mit Cloud-Speicherdiensten oder die Verarbeitung von Bildern aus externen Systemen.

Jetzt können Sie die aktualisierte Swagger-UI mit unseren neuen Endpunkten sehen:

So erstellen Sie eine Barcode-Scanner-API in C# mit IronBarcode: Abbildung 3 - Aktualisierte Swagger-UI mit den beiden neuen Endpunkten

Um unsere neuen Methoden zu testen, habe ich unser Beispiel-PDF verwendet, das zwei Beispiel-Barcodes enthält.

So erstellen Sie eine Barcode-Scanner-API in C# mit IronBarcode: Abbildung 4 - Beispiel-PDF

Der erste ist ein einfacher Barcode mit einer URL, und der zweite ist der im letzten Beispiel verwendete einfache, codierte Barcode. Hier ist die Ausgabe, wenn wir unser PDF über den Endpunkt ausführen:

So erstellen Sie eine Barcode-Scanner-API in C# mit IronBarcode: Abbildung 5 - Gescanntes PDF mit Barcode-Ausgabe

Wie Sie sehen können, hat es beide Barcodes korrekt erkannt und die Daten aus den gescannten Barcodes extrahiert.

Optimierung des Barcode-Scanners für Leistung und Genauigkeit

Die Feinabstimmung des Scanners für spezifische Anwendungsfälle verbessert sowohl Geschwindigkeit als auch Genauigkeit erheblich:

var optimizedOptions = new BarcodeReaderOptions
{
    // Speed settings: Faster, Balanced, Detailed, ExtremeDetail
    Speed = ReadingSpeed.Detailed,
    // Specify expected barcode types to reduce processing time
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Enable parallel processing for batch operations
    Multithreaded = true,
    MaxParallelThreads = 4,
    // Define scanning area to focus on specific regions
    CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area
    // Apply image corrections for damaged barcodes
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new ContrastFilter() 
    }
};
var optimizedOptions = new BarcodeReaderOptions
{
    // Speed settings: Faster, Balanced, Detailed, ExtremeDetail
    Speed = ReadingSpeed.Detailed,
    // Specify expected barcode types to reduce processing time
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Enable parallel processing for batch operations
    Multithreaded = true,
    MaxParallelThreads = 4,
    // Define scanning area to focus on specific regions
    CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area
    // Apply image corrections for damaged barcodes
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new ContrastFilter() 
    }
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Hinweis: Die CropArea-Eigenschaft ermöglicht es dem Scanner, sich auf einen bestimmten Matrix- oder Tabellenbereich innerhalb des Bildes zu konzentrieren. Jedoch können einige Objekte oder Barcode-Standorte außerhalb des definierten Bereichs liegen, was dazu führen kann, dass der Scanner fehlschlägt. Wenn dies der Fall ist, entfernen oder kommentieren Sie einfach die CropArea-Eigenschaft aus. IronBarcode identifiziert und dekodiert dann alle Barcode-Daten im standardmäßigen Vollbildmodus, wodurch sichergestellt wird, dass der Scanner in der Lage ist, jedes Windows- oder Microsoft-Laufzeitszenario zu bewältigen.

Die Verwendung optimierter Optionen für bekannte Scannertypen reduziert die Verarbeitungszeit. Eingebettete Bildfilter verbessern die Lesbarkeit von gescannten Barcodes bei minderwertigen Eingaben. Entwickler können das Scanner-SDK konfigurieren, verfügbare Scanner auflisten und UI-Komponenten oder Videogeräte integrieren.

Zusammenfassung

Der Aufbau einer C#-Scanner-API mit IronBarcode verwandelt komplexe Barcode-Verarbeitung in einfache REST-Endpunkte. Die Bibliothek verarbeitet alles von perfekten digitalen Barcodes bis hin zu herausfordernden realen Aufnahmen und bietet Genauigkeit auf Unternehmensniveau, ohne auf Hardware angewiesen zu sein.

Mit Unterstützung für mehrere Eingabeformate, fortschrittlicher Bildkorrektur und optimierten Leistungseinstellungen können Entwickler in kürzester Zeit produktionsreife Scanning-Lösungen bereitstellen. Get started with a free trial to implement your scanner API today, or explore the complete Dokumentation für erweiterte Funktionen wie Batch-Verarbeitung und maschinelles Lernen-gestützte Erkennung.

Häufig gestellte Fragen

Was ist der Hauptvorteil der Verwendung von IronBarcode zum Erstellen einer Scanner-API in C#?

IronBarcode ermöglicht es Entwicklern, schnell eine leistungsstarke, produktionsreife Barcode-Scanner-API mit minimalem Aufwand zu erstellen. Es vereinfacht den Prozess, indem es auf komplexe Scanner-SDK-Integrationen verzichtet.

Kann IronBarcode beschädigte Barcode-Eingaben verarbeiten?

Ja, IronBarcode ist darauf ausgelegt, Barcode-Daten selbst von beschädigten Scaneingaben zu verarbeiten und so eine hohe Zuverlässigkeit in realen Anwendungen sicherzustellen.

Welche Arten von Eingaben kann IronBarcode in einer C# Scanner-API verarbeiten?

IronBarcode kann Barcode-Daten aus verschiedenen Eingaben wie Bildern und PDFs verarbeiten und bietet vielseitige Lösungen für unterschiedliche Scananforderungen.

Gibt es ein Tutorial zum Erstellen einer Barcode-Scanner-API mit IronBarcode?

Ja, die Webseite bietet ein umfassendes Tutorial mit Codebeispielen, um Entwickler beim Aufbau eines RESTful Barcode-Scanning-Endpunkts mit IronBarcode zu unterstützen.

Wie schnell kann eine Barcode-Scanner-API mit IronBarcode eingerichtet werden?

Mit IronBarcode können Entwickler eine Barcode-Scanner-API in Minuten einrichten, wodurch Entwicklungszeit und Aufwand reduziert werden.

Benötigt IronBarcode komplexe SDK-Integrationen?

Nein, IronBarcode beseitigt die Notwendigkeit komplexer Scanner-SDK-Integrationen und erleichtert es den Entwicklern, Barcode-Scanning-Funktionalität zu implementieren.

Welche Programmiersprache wird mit IronBarcode zum Erstellen einer Scanner-API verwendet?

IronBarcode wird mit C# verwendet, um eine Scanner-API zu erstellen, und nutzt das .NET-Framework für eine robuste Leistung.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen