C#'ta Akışlardan Barkodları Nasıl Okursunuz
barKoder SDK'dan IronBarcode'a Geçiş
Barkoder, resmi .NET paketlerini — Plugin.Maui.Barkoder ve Barkoder.Xamarin — gemi ile gönderir, ancak her ikisi de kesinlikle mobil kamera tarama bileşenleridir. Eğer barKoder'i MatrixSight algoritması, DeBlur modu, çoklu-barkod algılama veya DPM desteği için değerlendirdiyseniz ve sonrasında dosya girişi, PDF işleme, sunucu tarafı dağıtım veya barkod oluşturma gerektiğini keşfettiyseniz, .NET'te barKoder'den bunların hiçbiri mevcut değildir. Bu kılavuz, IronBarcode'un her gereksinimi nasıl karşıladığını ve her senaryo için çalışan kod ile gösterir.
barKoder SDK'dan Neden Göç Etmeli
Bir barKoder değerlendirmesinden IronBarcode'a geçen ekipler aynı tetikleyicileri rapor eder:
Sadece Mobil Kamera Yüzeyi: Barkoder'in .NET izleri Plugin.Maui.Barkoder (v1.6.8, Mart 2026) ve Barkoder.Xamarin (v1.3.0) dir. Her ikisi de yerel iOS / Android SDK'larını sarar ve bir BarkoderView kamera kontrolü sunar. Genel amaçlı bir Barkoder.NET kütüphanesi yoktur, ASP.NET Core hedefi yoktur, konsol / işçi / masaüstü hedefi yoktur ve Linux sunucu hedefi yoktur.
Sadece-Okunur Mimari: Barkoder, yalnızca tarama için olan bir SDK'dır. Eğer uygulamanız barcode üretmesi gerekiyorsa — gönderim etiketleri yazdırma, paketin içine QR kodları oluşturma, belgelerde kodlar ekleme — Barkoder hiçbir şey sağlamaz. Proje ortasında bir üretim gereksinimi keşfeden ekipler, iş akışının her iki tarafını da kapsayan bir kütüphaneye ihtiyaç duyarlar.
PDF İşleme Yok: .NET kurumsal uygulamalarda barcodlar sıklıkla PDF belgelerde — faturalar, sevk irsaliyeleri, tıbbi belgeler, uyum belgeleri — görünür. Barkoder'in bu iş akışının bir konsepti yoktur. Bir mobil cihazda canlı kamera girişi için tasarlanmıştır ve bir PDF dosyasını işleyemez.
Sunucu-Taraf Deployment Yok: Barkoder'in işleme modeli cihaz üstünde mobil taramadır. ASP.NET Core, Azure Fonksiyonları, Docker konteynerları veya AWS Lambda'da çalışamaz. Sunucu taraf barcode API'leri, belge işleme hatları veya bulut fonksiyonları geliştiren ekiplerin Barkoder deployment için hiçbir yolu yoktur.
Dosya / Akış Girişi Yok: Bir MAUI uygulaması içinde bile, BarkoderView yalnızca canlı kamera karelerini tüketir. Dosya yolu, bayt dizisi veya Stream overloayoktur, bu yüzden yüklenen bir resmi veya galeri fotoğrafını işlemek farklı bir kütüphane gerektirir.
Temel Sınır
Barkoder'in MAUI yüzeyi kamera bağımlıdır. .NET geliştiricisi Plugin.Maui.Barkoder kullanarak bu şekilde bir kod yazar:
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.SetFlashEnabled(False)
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
End Class
IronBarcode aynı veri için bir dosya / akış / PDF API'si sunar:
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("scanned-label.png", options)
For Each result In results
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}")
Next
IronBarcode vs barKoder SDK: Özellik Karşılaştırması
| Özellik | barKoder SDK | IronBarcode |
|---|---|---|
| .NET / C# API | MAUI / Xamarin kamera UI sadece | Tam .NET yüzeyi |
| NuGet Paketi | Plugin.Maui.Barkoder, Barkoder.Xamarin |
BarCode |
| Hasarlı Barkod Kurtarma | MatrixSight / DeBlur | ReadingSpeed.ExtremeDetail + ML |
| Çoklu Barkod Tespiti | Evet | ExpectMultipleBarcodes = true |
| DataMatrix / DPM | Evet (yalnızca okuma) | Evet — oku ve üret |
| QR Kodu | Evet (yalnızca okuma) | Evet — oku ve üret |
| PDF417 | Evet | Evet |
| Aztek | Evet | Evet |
| Code128, Code39, EAN | Evet | Evet — 50+ format |
| Barkod Üretimi | None | Tam — tüm formatlar |
| PDF İşleme | None | Yerel |
| Dosya / Akış / bayt[] Girdisi | Yok — sadece kamera kareleri | Evet |
| ASP.NET Core | None | Tam |
| Docker / Linux | None | Tam |
| Azure Fonksiyonları | None | Tam |
| AWS Lambda | None | Tam |
| Çevrimdışı / İzole (Air-Gapped) | Cihaz üzerinde | Tamamen yerel |
| Async / Await | Geri çağrı tabanlı | Tam |
| Bağımlılık Enjeksiyonu | None | Tam .NET DI |
| iOS, MAUI aracılığıyla | Plugin.Maui.Barkoder (kamera UI) |
Programatik (dosya / akış) |
| Android, MAUI aracılığıyla | Plugin.Maui.Barkoder (kamera UI) |
Programatik (dosya / akış) |
| Fiyatlandırma | Yıllık abonelik | $749'dan .oneqislmeşuhperüd |
Hızlı Başlangıç: barKoder SDK'dan IronBarcode'a Göç
Adım 1: NuGet Paketini Değiştirin
IronBarcode'u kurun:
dotnet add package BarCode
Projeniz Plugin.Maui.Barkoder veya Barkoder.Xamarin yalnızca kamera dışı iş akışları için kullanıyorsa (veya tamamen dosya / PDF işlemeye geçiyorsanız), kaldırın:
dotnet remove package Plugin.Maui.Barkoder
dotnet remove package Plugin.Maui.Barkoder
Uygulama hala canlı bir kamera UI'sına ihtiyaç duyuyorsa, Plugin.Maui.Barkoder saklayın ve dosya / PDF / oluşturma çalışması için IronBarcode ekleyin.
Adım 2: Ad Alanlarını Güncelleyin
barKoder isim alanını, artık gerek duyulmadığında kaldırın ve IronBarcode isim alanını ekleyin:
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
Imports IronBarCode
Adım 3: Lisansa İzin Verin
Lisans başlatmayı uygulama başlatmada ekleyin — ASP.NET Core için Program.cs içinde veya konsol veya masaüstü uygulamalarda herhangi bir barkod operasyonundan önce:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kod Göç Örnekleri
Görüntülerden Barcode Okuma
Ana okuma senaryosu barKoder'in canlı kamera karelerinden IronBarcode'un dosya / akış / bayt[] API'sine yönlendirilir.
barKoder MAUI Yaklaşımı:
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"Barcode: {r.TextualData}")
Console.WriteLine($"Type: {r.BarcodeTypeName}")
Next
End Sub
End Class
IronBarcode Yaklaşımı:
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("scan.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
Next
IronBarcode'un BarcodeReader.Read() barkod formatını önceden belirtmeye gerek kalmadan otomatik olarak algılar. Aynı çağrı, mobil cihaz tarafından yakalanan ve bir sunucuya yüklenen görüntüler, bir dosya sisteminden yüklenen görüntüler veya bir akıştan alınan bayt dizileri olarak alınan görüntüler için çalışır. Kapsamlı okuma belgeleri için bkz. IronBarcode okuma kılavuzu.
Hasar Görmüş Barcode Kurtarma (DeBlur Modu Eşdeğeri)
Barkoder'in DeBlur modu, en çok alıntı yapılan yeteneklerinden biridir.IronBarcode dosya girişi için ReadingSpeed.ExtremeDetail ile eşdeğerini sunar.
barKoder MAUI Yaklaşımı:
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
Imports Barkoder.Maui
' Live camera scanning with DeBlur enabled via configuration
BarkoderView.SetEnabledBarcodeTypes() ' configure formats
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Recovered: {r.TextualData}")
Next
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("worn-shipping-label.png", options)
If results.Any() Then
Console.WriteLine($"Recovered barcode: {results.First().Value}")
Else
Console.WriteLine("Could not decode — image quality too low")
End If
ReadingSpeed.ExtremeDetail, kodlamaya girişmeden önce kontrast artırma, keskinleştirme, dönme düzeltme ve hasar kurtarma uygulayarak, çok geçişli ML tabanlı bir görüntü analizi hattını çalıştırır. Toplu iş akışları için, varsayılan olarak ReadingSpeed.Balanced kullanın ve yalnızca Balanced kodu çözemezse görüntüler için ExtremeDetail kullanın.
Çoklu-Barcode Algılama
Barkoder'in çok barkodlu çerçeve taraması IronBarcode'un ExpectMultipleBarcodes seçeneğine eşleştirilir ve hem görüntülerde hem de PDF'lerde çalışır.
barKoder MAUI Yaklaşımı:
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
Imports Barkoder.Maui
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
' Works identically on images and PDFs
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}")
Next
Bu tek bir yöntem çağrısıdır. Sayfa çıkarma, çoklu istek yok, her barcode için işlem yükü yok. PDF yerel olarak okunur.
DataMatrix Üretimi ve Okuma
Barkoder, DataMatrix'i okur ancak üretemez.IronBarcode iş akışının her iki tarafını da kapsar ve bu, endüstriyel izleme sistemlerinde yaygın bir gereksinimdir.
barKoder MAUI Yaklaşımı:
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
Imports Barkoder.Maui
' Camera-only DataMatrix scanning; no generation available
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Part ID: {r.TextualData}")
Next
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix) _
.SaveAsPng("part-label.png")
' Read DataMatrix from a scanned industrial part image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("etched-part-photo.png", options)
For Each result In results
Console.WriteLine($"Part Serial: {result.Value}")
Console.WriteLine($"Barcode Type: {result.Format}")
Next
Desteklenen kodlama formatları ve üretim seçeneklerinin tam listesi için bkz. IronBarcode barcode oluşturma belgeleri.
Markalama ile QR Kod Oluşturma
Barkoder barcode üretmez. IronBarcode, pazarlama, ambalajlama ve ürün kimlik iş akışları için yaygın bir gereksinim olan gömülü logolarla QR kodları üretir.
barKoder MAUI Yaklaşımı:
Not available — Plugin.Maui.Barkoder is a reader-only SDK with no
generation API on any platform.
IronBarcode Yaklaşımı:
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("branded-qr.png")
ASP.NET Core Barcode API Uç Noktası
Barkoder'in sunucu-taraf dağıtım modeli yoktur. Mobil tarama yükleme uç noktasının eşdeğeri — herhangi bir istemciden bir görüntüyü alıp barcode verileri döndüren — bir .NET Kütüphanesi gerektirir.
barKoder Yaklaşımı:
Not available — Plugin.Maui.Barkoder runs only inside a MAUI app head
against a live camera. There is no ASP.NET Core integration and no
server-side execution model.
IronBarcode Yaklaşımı:
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
app.MapPost("/api/scan", Async Function(file As IFormFile) As Task(Of IResult)
Using stream = file.OpenReadStream()
Dim imageBytes(CInt(stream.Length) - 1) As Byte
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read(imageBytes, options)
Return Results.Ok(results.Select(Function(r) New With {
.Value = r.Value,
.Format = r.Format.ToString()
}))
End Using
End Function)
barKoder SDK API'den IronBarcode Haritalama Referansı
Bu tablo, barKoder'in MAUI / Xamarin yüzeyini eşdeğer IronBarcode çağrısına haritalar:
| barKoder API | IronBarcode Eşdeğeri |
|---|---|
| Lisans barKoder portalı / konfigürasyonu üzerinden ayarlanıyor | IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
BarkoderView üzerinde DeBlur yapılandırması |
Speed = ReadingSpeed.ExtremeDetail |
BarkoderView üzerinde çoklu tarama yapılandırması |
ExpectMultipleBarcodes = true |
SetEnabledBarcodeTypes(...) |
BarcodeEncoding.<Format> (okumada otomatik algılanır) |
BarkoderView.StartScanning(IBarkoderDelegate) |
BarcodeReader.Read("image.png") — senkron |
BarcodeResult.TextualData |
result.Value |
BarcodeResult.BarcodeTypeName |
result.Format |
| MatrixSight hasar kurtarma | ML ön işleme ile ReadingSpeed.ExtremeDetail |
| Canlı kamera kare girişi | Dosya yolu / Stream / byte[] girdisi |
| Cihaz üzerinde işleme | Tamamen yerel — ağ aramaları yok |
| Oluşturma desteği yok | BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode() |
| PDF desteği yok | BarcodeReader.Read("document.pdf") — yerel |
| Sunucu dağıtımı yok | ASP.NET Core, Docker, Azure Functions, Lambda'da çalışır |
| Sayfa dizini yok (N/A) | result.PageNumber — PDF okumalarında mevcut |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: NuGet Paket İsimleri
barKoder SDK: Resmi .NET paketleri Plugin.Maui.Barkoder ve Barkoder.Xamarin. Hiçbiri mobil olmayan senaryoları kapsamaz.
Çözüm: IronBarcode'u yükleyin:
dotnet add package BarCode
Plugin.Maui.Barkoder artık gerekliyse (tamamen dosya / PDF / sunucu işlemeye geçiyorsunuz), onu kaldırın:
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
Sorun 2: Kamera Kare Girdisi vs Dosya Girdisi
barKoder SDK: Tüm girişler canlı bir kamera karesi olarak gelir — cihaz üstünde işlenen bir sürekli video akışı. Dosya yolu giriş modu yoktur.
Çözüm: IronBarcode, dosyaları, akışları, bayt dizilerini ve System.Drawing.Image nesnelerini kabul eder. Mobil istemciden yüklenen görüntüler için istekteki akışı doğrudan okuyun:
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
Imports System.IO
Using stream = file.OpenReadStream()
Dim imageBytes = New Byte(stream.Length - 1) {}
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim results = BarcodeReader.Read(imageBytes, options)
End Using
Sorun 3: Geri Arama Tabanlı API vs. Senkron Sonuç
barKoder SDK: BarkoderView.StartScanning(IBarkoderDelegate) delege / geri arama modeli kullanır — barkodlar kamera beslemesinde algılandığında DidFinishScanning(BarcodeResult[]) asenkron olarak ateşlenir.
Çözüm: IronBarcode'un BarcodeReader.Read() senkrondur ve bir IEnumerable<BarcodeResult> doğrudan döndürür. Async gerekli olan ASP.NET Core bağlamlarında, Task.Run() içine sarın:
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
Sorun 4: DeBlur Modu Konfigürasyonu
barKoder SDK: DeBlur, tarama başlamadan önce BarkoderView yapılandırmasında etkinleştirilir ve sonraki tüm taramalara uygulanır.
Çözüm: IronBarcode'da, eşdeğer her okuma için BarcodeReaderOptions aracılığıyla ayarlanır ve ReadingSpeed.ExtremeDetail ile eşdeğerdir. Seçenek objesini bir kez oluşturun ve yeniden kullanın:
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
Imports System
Dim deepOptions As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)
Sorun 5: Üretim Yeteneğinin Olmadığı
barKoder SDK: Barkoder yalnızca okumak içindir. Barcode veya QR kodlar oluşturmak için hiçbir API yoktur.
Çözüm:IronBarcode hem okuma hem de üretimi kapsar. Standart formatlar için BarcodeWriter ve QR kodları için QRCodeWriter kullanın:
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports System
' Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
' QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500) _
.SaveAsPng("product-qr.png")
' Get as bytes for embedding in API response or PDF
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128) _
.ToPngBinaryData()
barKoder SDK Göç Kontrol Listesi
Geçiş Öncesi Görevler
Kod tabanınızı barKoder referansları için denetleyin:
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
Şu anda uygulanan veya planlanan barcode senaryolarını belgeleyin:
- Hangi barcode formatlarının okunması gerekiyor (Code128, DataMatrix, QR, PDF417, vb.)
- Hasarlı barkod kurtarmanın gerekli olup olmadığını (
ReadingSpeed.ExtremeDetail) - Çoklu barkod algılamanın gerekli olup olmadığını (
ExpectMultipleBarcodes = true) - Barkod üretiminin gerekli olup olmadığını (
BarcodeWriter,QRCodeWriter) - PDF işlemenin gerekli olup olmadığını (
BarcodeReader.Read("doc.pdf")) - Yayın hedefleri (ASP.NET Core, Azure Fonksiyonları, Docker, Lambda, masaüstü, MAUI)
Kod Güncelleme Görevleri
- Artık gerekli olmadığında
Plugin.Maui.BarkoderveyaBarkoder.Xamarinkaldırmak için.csprojiçinden. BarCodeNuGet paketini yükleyin- Artık gerekmediğinde
using Barkoder.Maui;(veya Xamarin eşdeğeri) kaldırın - Tüm barkod işleme dosyalarına
using IronBarCode;ekleyin - Uygulama başlatımında
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";ekleyin BarkoderView.StartScanning/DidFinishScanninggeri çağırmalarıBarcodeReader.Read(filePath, options)ile değiştirinBarcodeResult.TextualData'yiresult.Valueile eşleştirinBarcodeResult.BarcodeTypeName'yiresult.Formatile eşleştirin- DeBlur yapılandırmasını
Speed = ReadingSpeed.ExtremeDetailiçindeBarcodeReaderOptionseşleştirin - Çoklu tarama yapılandırmasını
ExpectMultipleBarcodes = trueiçindeBarcodeReaderOptionseşleştirin - Herhangi bir üretim gereksinimi için
BarcodeWriter.CreateBarcode()çağrıları ekleyin - QR kodu üretim gereksinimleri için
QRCodeWriter.CreateQrCode()çağrıları ekleyin - Herhangi bir PDF ön işleme kodunu
BarcodeReader.Read("document.pdf")ile değiştirin - Async ASP.NET Core uç noktaları için senkronize
BarcodeReader.Read()çağrılarınıTask.Run()içine sarın
Geçiş Sonrası Testler
Kod güncellemelerini tamamladıktan sonra, aşağıdakileri doğrulayın:
- Kullanılan tüm resim formatları için
BarcodeReader.Read()'in sonuç döndürdüğünü onaylayın (PNG, JPEG, TIFF, BMP) ReadingSpeed.ExtremeDetail'in test setinizdeki en düşük kalite örneklerden barkodları kurtardığını doğrulayınExpectMultipleBarcodes = true'in çok barkodlu belgelerden doğru barkod sayısını döndürdüğünü doğrulayın- Üretim belge iş akışlarında kullanılan tüm PDF sürümlerine karşı PDF okumasını test edin
BarcodeWriter.CreateBarcode()çıktısının hedef tarayıcılarınız tarafından taranabilir olduğunu doğrulayınQRCodeWriter.CreateQrCode()çıktısının mobil QR okuyucular tarafından taranabilir olduğunu doğrulayın- ASP.NET Core uç noktası (uygulanabilir ise) ile mobil istemcilerden dosya yüklemeleri ile test edin
- Docker, Azure veya Lambda dağıtım hedeflerinde doğru çalışmayı doğrulayın
- Uygulama alanlarında tam okuma-işleme-üretme döngüsünü kapsayan uçtan uca testler çalıştırın
IronBarcode'a Geçmenin Temel Faydaları
Kamera Olmayan .NET'i Kapsayan Bir Platform: IronBarcode, NuGet'ten yüklenir ve herhangi bir .NET projesinde çalışır — ASP.NET Core, Azure İşlevleri, Lambda, Docker, konsol, işçi, WPF, WinForms, Avalonia, Blazor ve MAUI benzerleri. Barkoder'in Plugin.Maui.Barkoder yalnızca bir MAUI mobil uygulama başında kamera UI'sını kapsar;IronBarcode diğer her şeyi kapsar.
Kamerasız Hasara Dayanıklı Okuma: Barkoder'i çekici yapan özellikler — DeBlur, MatrixSight, hasar kurtarma — IronBarcode'da ReadingSpeed.ExtremeDetail ve ML tabanlı görüntü ön işleme aracılığıyla mevcuttur. Barkoder'in canlı kamera girişlerinde elde ettiği aynı doğruluk geliştirmelerini,IronBarcode dosyalar, taranmış belgeler ve yüklenen görüntülerde elde eder.
Tam Okuma ve Üretim İş Akışı: Barkoder sadece okuma yapar. IronBarcode, tek bir paketle 50'den fazla formatta hem barkod okuma hem de üretim yapar. Kargo etiketleri üretmesi, ambalaj için QR kodları oluşturması veya belgelerde barkod yerleştirmesi gereken ekipler ikinci bir kütüphaneye ihtiyaç duymaz.
Yerel PDF Desteği: PDF belgelerinden — faturalar, çizelgeler, tıbbi kayıtlar, uyum belgeleri — barkod okuma, IronBarcode'un birinci sınıf bir yeteneğidir. Ara görüntü çıkarma yok, sayfa başına API çağrısı yok ve ek bağımlılıklar yok. Çok sayfalı bir PDF, tek bir BarcodeReader.Read() çağrısında işlenir.
Tam Sunucu Tarafı Dağıtım: IronBarcode, ASP.NET Core, Azure Functions, AWS Lambda, Docker konteynerleri ve diğer tüm .NET barındırma ortamlarında çalışır. Barkodları yerel olarak işler, ağ çağrısı yapmaz, API anahtarlarını yönetmez ve uzak bir servisin ek gecikmesi olmaz. Bir barkod ya da bir milyon barkod işlemek aynı maliyettedir — istek başına ücret yoktur.
Öngörülebilir Sürekli Fiyatlandırma: IronBarcode, tek seferlik sürekli bir lisansla, tek bir geliştirici için 749$'dan başlayan fiyatlarla mevcuttur ve istek başına ücretlendirme, hacim sınırları veya abonelik yenilemeleri yoktur. Üretim uygulamaları geliştiren ve ölçekli barkod işleme yapan ekipler için maliyet modeli basit ve öngörülebilirdir.
Sıkça Sorulan Sorular
Barkoder SDK'dan IronBarcode'a neden geçmeliyim?
Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.
Barkoder API çağrılarını IronBarcode ile nasıl değiştiririm?
Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.
Barkoder SDK'dan IronBarcode'a geçişte ne kadar kod değişir?
Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.
Geçiş sırasında hem Barkoder SDK hem de IronBarcode kurulu kalmalı mı?
Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.
IronBarcode için NuGet paketi adı nedir?
Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.
IronBarcode, Barkoder SDK ile karşılaştırıldığında Docker dağıtımını nasıl basitleştirir?
IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.
IronBarcode, Barkoder'den geçişten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?
Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.
IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?
Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.
IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.
Barkoder SDK'dan IronBarcode'a geçişte hangi sonuç özellikleri değişir?
Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.
Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?
IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.
IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?
Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

