BarcodeScanning.MAUI vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
BarcodeScanning.Native.Maui vs IronBarcode: Camera Control vs Full Barcode SDK
BarcodeScanning.Native.Maui, MAUI uygulamalarına yönelik bir kamera eklentisidir. Uygulamanız yüklenen dosyaları işler veya PDF'lerden barkodları okursa, bu kullanım durumu için tasarlanmamıştır. Paket kendini ".NET MAUI için barcode tarama kütüphanesi" olarak tanımlar ve uygulamada barcode canlı kamera karesine girdiğinde bir olayı tetikleyen bir CameraView kontrolüdür. Bu, tam bir özellik kümesidir. Bu karşılaştırma, ekiplerin her aracın nereye uyduğunu anlamalarına yardımcı olan bir kamera kontrol kütüphanesi ile tam özellikli bir barkod SDK'sı arasındaki mimari farkı incelemektedir.
BarcodeScanning.MAUI'yi Anlamak
BarcodeScanning.Native.Maui, iOS/macOS (Apple's Vision çerçevesi), Android (Google ML Kit) ve Windows'ta (ZXingCpp, sürüm 3.0.1'de eklendi) doğal kamera barcode tespit API'lerini bir MAUI CameraView kontrolüne sarar. Bir geliştirici, kontrolü XAML sayfasına yerleştirir, bir olay işleyicisi bağlar ve kütüphane, canlı kamera beslemesinde bir barkod algılandığında bu olayı tetikler. Tüm etkileşim modeli kamera-için, olay-dışıdır — başka bir yol yoktur.
Kütüphane açık kaynak kodludur ve MIT lisansı altında ücretsizdir. Tasarım hedefi dar ve açıktır: MAUI uygulamaları için minimum mümkün API yüzeyi ile canlı kamera barkod algılama sağlamak. Bu hedefi kendi kod çözümleme motorunu uygulamak yerine platform başına yerel motorlara delegasyon yoluyla başarır.
BarcodeScanning.Native.Maui'nin ana mimari özellikleri:
- Sadece Kamera Girişi: Kütüphane sadece canlı kamera çerçevelerini kabul eder. Genel API'de hiç
ReadFromFile(),ReadFromBytes(),ReadFromStream()veReadFromPdf()metodu yok. - Yalnızca MAUI Hedefler: Kütüphane MAUI hedeflerini destekler — iOS, Android, Windows (3.0.1'den beri, ZXingCpp ile), ve macOS Catalyst. MAUI projeleri dışında kullanılamaz (ASP.NET, konsol, WPF veya WinForms kullanılmaz).
- Üç Farklı Motor: iOS/macOS'ta Apple Vision, Android'de Google ML Kit ve Windows'ta ZXingCpp. Semvol kapsama alanı ve kod çözümleme davranışı, üç motor arasında değişiklik gösterir.
- Üretim Yeteneği Yok: BarcodeScanning.Native.Maui kamera çerçevelerinden barkodları okur. Herhangi bir formatta barkod üretemez.
- iOS'da UPC-A Özelliği: Apple'ın Vision çerçevesi, UPC-A barkodları için 13 rakam döndürebilir (EAN-13 kodlamasını karşılamak için başı 0 ekleyerek). Kütüphane bu ham değeri geçirir ve uygulamalar gerektiği gibi normalleştirir.
- iOS/Android'deki PDF417 Güvenilirliği: Kütüphanesinin GitHub sorun izleyicisi, PDF417 taramanın "çok problemli — çoğu tarama gerçekleşmez" olarak tanımlar, bu, nakliye etiketleri, ehliyetler ve biniş kartları için önemlidir.
- Minimal Genel Yüzey: Genel API,
CameraView,OnDetectionFinished,OnDetectionFinishedEventArgveBarcodeResult'den oluşur veDisplayValueveBarcodeFormatile birlikte gelir. Uygulama kodunun etkileşimde bulunduğu bütünlük budur. - MIT Lisansı, Ücret Yok: Kütüphane lisans ücreti olmaksızın ücretsiz kullanılabilir.
Canlı Kamera Tarama Deseni
Tüm BarcodeScanning.Native.Maui API deseni, bir XAML kontrolü ile eşleşen bir C# olay işleyicisidir:
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Bu kontrol, kullanıcıların MAUI sayfasına gömülü gerçek zamanlı bir vizör görüntülemesini sağlar. Barkod algılama, kamera akışı aktifken sürekli olarak tetiklenir. UX, "işaretle ve tara" birincil etkileşim olduğu tüketici uygulamaları için uygun. Kısıtlama, kitaplığın desteklediği tek etkileşimin bu olmasıdır — MAUI bağlamında canlı kamera algılamanın ötesine geçen gereksinimler kapsamı dışında kalır.
IronBarcode Anlama
IronBarcode, veri girdileri üzerinde çalışan, .NET için ticari bir barkod okuma ve oluşturma kütüphanesidir. Görüntü dosyalarından, bayt dizilerinden, akışlardan ve PDF belgelerinden barkodları okur. MAUI'de, sistem kamerası ile MediaPicker üzerinden entegredir - uygulamaların fotoğraf seçimi için kullanılan aynı standart MAUI API'si - bir fotoğraf yakalayıp ve ardından sonuç olarak oluşan görüntüyü statik bir veri girişi olarak işler.
IronBarcode, platforma özgü doğal API'lere yönlendirmek yerine kendi yönetilen barcode kod çözme motorunu uygular. Bu, aynı BarcodeReader.Read() çağrısının desteklenen .NET hedeflerinde — Windows, Linux, macOS, ASP.NET ve arka plan sunucu proseslerinde — ve ayrıca bir görüntü yakalanıp okuyucuya iletildiğinde MAUI mobil hedeflerinde tutarlı davranacağı anlamına gelir. Kütüphane ayrıca BarcodeWriter ve QRCodeWriter üzerinden tam bir barcode oluşturma API'si sağlar.
IronBarcode'un ana özellikleri:
- Statik Dosya Tabanlı API:
BarcodeReader.Read(), dosya yolu, bayt dizisi, akış ya da PDF — herhangi bir statik veri kaynağını kabul eder. - Geniş Platform Kapsama: Windows, Linux ve macOS (ARM dahil) desteklenir, .NET Framework 4.6.2+, .NET Core 3.1+, ve .NET 5/6/7/8 yanında. Aynı yönetilen kod yolu, platforma özgü dallanmalar olmadan tüm desteklenen hedeflerde çalışır.
- Barcode Oluşturma:
BarcodeWriter.CreateBarcode()veQRCodeWriter.CreateQrCode()Code128, QR, DataMatrix ve diğer formatları görüntü dosyası ya da bayt dizisi olarak üretir. - PDF Desteği: PDF belgelerine gömülü barkodlar, ara bir görüntü çıkarma adımı olmaksızın doğrudan okunur.
- Tutarlı UPC-A Kod Çözümü: Yönetilen motoru aracılığıyla standart 12 haneli UPC-A değerini döndürür.
- Ticari Lisanslama: Lite $749, Plus $1,499, Professional $2,999, Unlimited $5,999 — bir yıllık destekle süresiz lisanslar.
- Sunucu Tarafı Dağıtım: Fiziksel kamera bağımlılığı olmadan ASP.NET, Azure Functions, Docker konteynerleri ve AWS Lambda üzerinde çalışır.
Özellik Karşılaştırması
Aşağıdaki tablo, BarcodeScanning.Native.Maui ve IronBarcode arasındaki temel farklılıkları vurgular:
| Özellik | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Birincil Amaç | Canlı kamera barkod algılama | Herhangi bir veri kaynağından barkod okuma ve oluşturma |
| Giriş Kaynakları | Yalnızca canlı kamera çerçeveleri | Dosyalar, bayt dizileri, akışlar, PDF'ler |
| Platform Desteği | Yalnızca MAUI — iOS, Android, Windows (ZXingCpp üzerinden), macOS Catalyst | Windows, Linux, macOS, ASP.NET, konsol, WPF, artı MAUI yakalanan görüntüler üzerinden |
| Tanıma Motoru | Üç motor (Apple Vision / Google ML Kit / ZXingCpp) | Tüm hedeflere tek yönetilen motor |
| Barkod Üretimi | Hayır | Evet — BarcodeWriter + QRCodeWriter |
| Lisans Modeli | MIT (ücretsiz, açık kaynak) | Ticari — Lite $749'dan Unlimited $5,999'a |
| Sunucu-Tarafı / ASP.NET | Hayır | Evet |
Ayrıntılı Özellik Karşılaştırması
| Özellik | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Okuma | ||
| Canlı kamera çerçevesi okuma | Evet — CameraView kontrolü | Hayır (Medya Seçici'yi kullanarak yakalayın, sonra okuyun) |
| Uygulama içi kamera vizör | Evet — gerçek zamanlı sürekli | Hayır — Medya Seçici aracılığıyla sistem kamera UI'yi kullanır |
| Görüntü dosyasından oku | Hayır | Evet — BarcodeReader.Read(path) |
| Bayt dizisinden oku | Hayır | Evet — BarcodeReader.Read(bytes) |
| Akıştan oku | Hayır | Evet — BarcodeReader.Read(stream) |
| PDF'den oku | Hayır | Evet — BarcodeReader.Read(pdf) |
| Çoklu barkod algılama | Evet (e.BarcodeResults aracılığıyla kare başına birden fazla) |
Evet (ExpectMultipleBarcodes seçeneği) |
| Okuma hız kontrolü | None | ReadingSpeed.Faster / Balanced / Detailed / ExtremeDetail |
| iOS üzerinde UPC-A | 13 hane döndürebilir; applications normalize | Standart 12 haneli UPC-A döndürür |
| PDF417 güvenilirliği | iOS/Android motorlarında belgelenmiş sorunlar | Desteklenen |
| Üretim | ||
| Barkod oluşturma | Hayır | Evet — BarcodeWriter.CreateBarcode() |
| QR kod üretimi | Hayır | Evet — QRCodeWriter.CreateQrCode() |
| PNG / bayt dizisi olarak çıktı | Hayır | Evet |
| Platform | ||
| iOS MAUI | Evet (Apple Vision) | Evet (yakalanan görüntü aracılığıyla) |
| Android MAUI | Evet (Google ML Kit) | Evet (yakalanan görüntü aracılığıyla) |
| Windows MAUI | Evet (ZXingCpp, 3.0.1'den beri) | Evet |
| macOS MAUI | Evet(Mac Catalyst, Apple Vision) | Evet |
| ASP.NET / sunucu-tarafı | Hayır | Evet |
| Docker / Azure / AWS Lambda | Hayır | Evet |
| .NET Framework desteği | Hayır (sadece MAUI) | Evet — .NET Framework 4.6.2+ |
| Lisanslama | ||
| Lisans türü | MIT (açık kaynak) | Ticari süresiz |
| Maliyet | Ücretsiz | Lite $749, Plus $1,499, Professional $2,999, Unlimited $5,999 |
| Değerlendirme düzeyi | Yok | Ücretsiz deneme mevcut |
Mimari: Kamera Kontrolü vs Dosya İşleme API'si
Bu iki kütüphane arasındaki en temel fark girdi modelidir. BarcodeScanning.Native.Maui sürekli bir kamera akışı etrafında tasarlanmıştır; IronBarcode, ayrık veri girdileri etrafında tasarlanmıştır. Bunlar aynı fikrin rekabet eden uygulamaları değil — farklı kullanım durumları için farklı mimari seçimlerdir.
BarcodeScanning.MAUI Yaklaşımı
BarcodeScanning.Native.Maui, her platformda yerel kamera algılama hattını sarar. Android'de, ML Kit çerçeveleri işler; iOS ve macOS'ta, Apple'ın Vision çerçevesi çerçeveleri işler; Windows'da, ZXingCpp çerçeveleri işler. Kütüphane bunu bir MAUI CameraView kontrolü ve bir OnDetectionFinished olayı olarak sunar. Uygulama kodu asla doğrudan görüntü baytlarını işlemez — yalnızca olaydan çıkan algılanan barkod değerlerini işler.
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Bu tasarımın sonucu, başka bir giriş noktası olmadığıdır. Kamera isteğe bağlı değildir — kütüphanenin bildiği tek girdidir. Bir sunucu, bir dosya, bir PDF veya herhangi bir MAUI dışı host, kütüphaneye bir yolu yoktur.
IronBarcode Yaklaşımı
IronBarcode, görüntü verilerini BarcodeReader.Read() statik metodu üzerinden alır. Çağıran, veriyi — herhangi bir kaynaktan — sağlar ve kütüphane bunu kodlar. MAUI'de, veriler MediaPicker'dan gelir; bir sunucuda, bir form yüklemesinden gelir; bir masaüstü uygulamasında, bir dosya dialog'undan gelir.
//IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
//IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO
Imports Microsoft.Maui.Media
Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
ResultLabel.Text = result.Value
Next
End Using
End Using
End Sub
Bu kod, bir görüntüyü yakalayabilen MAUI hedeflerinde aynı şekilde çalışır. Sunucu tarafı kullanım için, aynı BarcodeReader.Read() metodu, bir yüklenen dosyanın bayt dizisini ya da bir PDF yolunu kabul eder. IronBarcode dokümantasyonu tüm desteklenen giriş türlerini kapsar.
Platform Kapsamı ve Tanıma Motorları
Platform kapsamı, MAUI uygulamaları oluşturan ve aynı zamanda barkod mantığını MAUI dışı projelerle paylaşması gereken ekipler için önemlidir.
BarcodeScanning.MAUI Yaklaşımı
BarcodeScanning.Native.Maui, dört MAUI hedefine (iOS, Android, Windows 3.0.1 sonrası, ve macOS Catalyst) destek sağlar, fakat her hedef farklı bir tanıma motoru kullanır: iOS ve macOS için Apple Vision, Android için Google ML Kit ve Windows için ZXingCpp. Semboloji kapsamı ve kod çözme davranışları üç motor arasında farklılık gösterir, bu yüzden bir platformda güvenilir bir şekilde çözülen bir barkod, diğerinde farklı davranabilir. MAUI dışındaki — ASP.NET, konsol, WPF, WinForms, Blazor Server, Azure Functions — kütüphanenin bir uygulaması yoktur. Hem MAUI uygulamasında hem de bir arka uç hizmetinde barkod mantığına ihtiyacı olan ekipler, MAUI dışı kod için farklı bir kütüphane kullanmalıdır.
IronBarcode Yaklaşımı
IronBarcode'un BarcodeReader.Read() çağrısı, desteklenen her hedefte aynı yönetilen motoru kullanır, bu nedenle davranışı Windows, Linux, macOS, ASP.NET ve bir görüntü yakalayıp okuyucuya iletebilen herhangi bir MAUI hedefinde tutarlıdır. Hiçbir #if WINDOWS blokları, şartlı bağımlılık yüklemesi ve yer tutucu uygulamalara gerek yoktur. Dosya ve PDF girdileri için, desen de tutarlıdır:
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode
' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim results = BarcodeReader.Read(file.FullPath)
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
End If
' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
IronBarcode MAUI entegrasyon rehberi tüm MAUI hedefleri için tam kurulum talimatları sağlar.IronBarcode ayrıca, BarcodeScanning.Native.Maui'nin hiçbir yol sunmadığı ASP.NET, Docker, Azure Functions ve AWS Lambda ortamlarında sunucu-tarafı dağıtımı destekler.
Barkod Okuma Doğruluğu: UPC-A ve PDF417
BarcodeScanning.Native.Maui'deki iki format-specific davranış, üretim uygulamaları için dikkate değerdir.
BarcodeScanning.MAUI Yaklaşımı
iOS'ta, BarcodeScanning.Native.Maui'nin temel algılaması (Apple Vision), UPC-A barkodları için 13 hane döndürebilir. UPC-A 12 basamaklı bir formattır; fazladan baştaki sıfır EAN-13 kodlamasını eşleştirir. Kütüphane bu ham değeri geçirir ve uygulamalar gerektiği gibi normalleştirir. Veritabanına normalizasyon olmadan UPC-A değerlerini kaydeden uygulamalar, başta sıfır olan kayıtlar biriktirebilir.
Belgelenmiş geçici çözüm, formatı kontrol eder ve değeri kırpar:
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
' Normalize iOS UPC-A — strip the leading zero when present
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode Is Nothing Then Return
Dim value = barcode.DisplayValue
If barcode.BarcodeFormat = BarcodeFormats.Upca AndAlso value.Length = 13 Then
value = value.Substring(1)
End If
ProcessBarcode(value)
End Sub
Format kontrolü, EAN-13 değerlerinin baştan 0 ile başlayanların yanlışlıkla kırpılmaması için gereklidir. PDF417, GitHub sorunları içinde, iOS/Android motorlarında 'çok problemli — çoğu tarama asla gerçekleşmez' olarak ayrı ayrı belgelenmiştir, bu da gönderi etiketleri, ehliyetler ve biniş kartları için alakalıdır.
IronBarcode Yaklaşımı
IronBarcode, yönetilen motoru aracılığıyla standart 12 haneli UPC-A değerini döndürür. PDF417, desteklenen bir formattır. Üretim tarafı da IronBarcode'un API'si aracılığıyla kullanılabilir:
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
Barkod verisi doğruluğu stok sorgulamaları, satış noktası işlemleri veya tedarik zinciri entegrasyonlarını doğrudan etkilediğinde, IronBarcode'un tutarlı format işlemesi, platforma özgü normalizasyon ihtiyacını azaltır. IronBarcode barkod okuma dokümantasyonu format-spesifik davranışı ayrıntılı olarak ele alır.
API Eşleme Başvurusu
| BarcodeScanning.Native.Maui | IronBarcode |
|---|---|
CameraView XAML kontrolü |
Kamera kontrolü yok — yakalamak için MediaPicker.CapturePhotoAsync() kullanın |
OnDetectionFinished olayı |
BarcodeReader.Read(imageBytes) |
e.BarcodeResults |
BarcodeReader.Read() dönüş değeri (IEnumerable) |
e.BarcodeResults.FirstOrDefault() |
results.FirstOrDefault() |
barcode.DisplayValue |
result.Value |
barcode.BarcodeFormat |
result.Format |
BarcodeFormats="All" |
Otomatik algılanmış — çok format için yapılandırma gerektirmez |
CameraEnabled="True" |
MediaPicker.CapturePhotoAsync() çağrısı |
| Yalnızca MAUI (iOS, Android, Windows, macOS) | MAUI (yakalanmış görüntü aracılığıyla) + ASP.NET, konsol, WPF, masaüstü, sunucu |
| Yalnızca kamera çerçeveleri | Dosyalar, bayt dizileri, akışlar, PDF'ler |
| Dosya/PDF API'si yok | BarcodeReader.Read(path) — görüntü dosyalarını ve PDF'leri kabul eder |
| MAUI hedeflerinde üç motor | Tüm hedeflere tek yönetilen motor |
| Üretim API'si yok | BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode() |
Ekipler BarcodeScanning.MAUI'den IronBarcode'a Geçmeyi Düşündüğünde
Platformlar Arası Motor Tutarlılığı Gereklilik Haline Geliyor
iOS, Android, Windows ve macOS'u hedefleyen MAUI uygulamaları, BarcodeScanning.Native.Maui kullandıklarında üç farklı tanıma motoru alır: Apple Vision (iOS/macOS), Google ML Kit (Android), ve ZXingCpp (Windows). Her motorun kendi semboloji kapsamı ve kod çözme davranışı vardır, bu nedenle aynı barkod platformlar arasında farklı çözülebilir — ve uygulamalar genellikle farkları gidermek için normalizasyon katmanları ekler. Bu bakım yükü artarsa veya QA platformlar arası gerilemeleri motor farklarına bağlı olarak bildirirse, ekipler bazen barkod katmanını her hedefte aynı şekilde davranan tek bir yönetilen motora göç ettirir.
Dosya Yükleme veya PDF İşleme Gereksinimleri Eklendiğinde
Mobil uygulamalar genellikle tek giriş yöntemi olarak canlı kamera taramasıyla başlar ve daha sonra yüklenmiş görüntüleri veya belgeleri kabul etmeye genişler. Kullanıcının galerisindeki bir fotoğraftan, e-posta yoluyla alınan bir görüntüden veya gönderi manifestleri veya biniş kartları içeren bir PDF'den barkod taraması yapması gerektiğinde, BarcodeScanning.Native.Maui bu girişler için bir kod yolu yoktur. Bu gereklilik sınırına ulaşan ekipler bir seçimle karşı karşıya: dosya ve PDF girişleri için BarcodeScanning.Native.Maui'nin yanına ikinci bir barkod kütüphanesi eklemek veya tüm giriş türlerini işleyen tek bir kütüphaneye göç etmek. Farklı API'ler ve sonuç türleri olan iki barkod paketini yönetmek, tek paket çözümünün kaçındığı uzun vadeli bir karmaşıklık ekler.
Sunucu-Tarafı Barkod İşleme Başlatıldı
Mobilde barkod tarayan uygulamalar genellikle bir sunucu-tarafı bileşeni geliştirir — barkodları doğrulayan bir ASP.NET API uç noktası, PDF'leri işleyen bir arka plan işi veya yüklenmiş belgelerden izleme numaralarını çıkaran bir bulut fonksiyonu. BarcodeScanning.Native.Maui, bir MAUI UI kontrol kütüphanesidir; Sunucu tarafında bir uygulaması yoktur. Hem mobilde hem de sunucuda aynı barkod okuma mantığına ihtiyaç duyan bir ekip, sunucu tarafı için farklı bir kütüphane kullanmalıdır. Sunucu-tarafı gereksinimi geldiğinde, ekipler sıklıkla, hem mobil hem de sunucuya hitap eden tek bir kütüphaneye toparlamanın, iki ayrı uygulamayı sürdürmekten daha tercih edilir olup olmadığını değerlendirirler.
UPC-A Veri Normalizasyonu Kaygı Haline Geliyor
iOS UPC-A 13 basamaklı davranışı her zaman geliştirme aşamasında fark edilmez. Geliştirme aşamasında taranan UPC-A barkodları doğru çalışıyor gibi görünebilir, ancak Apple'ın Vision çerçevesinden gelen öncül sıfır, normalizasyon eksikliğinde veritabanında görünebilir. İnventör kayıtlarında, satış noktası sistemlerinde veya tedarik zinciri entegrasyonlarında 13 haneli UPC-A değerleri keşfeden ekipler hem bir kod düzeltmesine hem de bir veri düzeltme adımına ihtiyaç duyabilir. Belgelenmiş normalizasyon yeni taramaları ele alır; tutarlı UPC-A çıkısı olan bir kütüphaneye geçmek bazen uzun vadeli bir çözüm olarak tercih edilir.
PDF417 Belge Taraması Gerekli Olduğunda
PDF417, Kuzey Amerika'da sevkiyat etiketleri, ehliyetler ve biniş kartlarında kullanılan barkod formatıdır. Bunlar, lojistik, kimlik doğrulama ve seyahat uygulamaları için yaygın tarama hedefleridir. BarcodeScanning.Native.Maui'nin GitHub sorun izleyici PDF417'yi 'çok problemli — çoğu tarama asla gerçekleşmez' olarak iOS/Android motorlarında belgeler. PDF417 güvenilirliğinin işlevsel bir gereklilik olduğu uygulamalar için, ekipler genellikle alternatif kütüphaneleri değerlendirir.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Kamera Olayından Medya Seçici ve Statik Okuya Geçiş
Göçteki temel yapısal değişiklik, sürekli kamera olay deseninin yerine bir MediaPicker görüntü ile ardından BarcodeReader.Read() gelmesidir. OnDetectionFinished olay işleyicisi, CameraView XAML kontrolü ve scanner: XML ad alanı bildirimi kaldırılır. Yerine bir düğme MediaPicker.CapturePhotoAsync()'i tetikler ve sonuçta ortaya çıkan fotoğraf baytları BarcodeReader.Read()'ya iletilir. Bu, kullanıcı deneyimini canlı sürekli vizörden sistem kamera ekranına dönüştürür — çoğu iş uygulaması için uygundur.
İş Parçacığı Aktarma Değişiklikleri
BarcodeScanning.Native.Maui, OnDetectionFinished'i bir arka plan iş parçacığı üzerinde tetikler, bu nedenle UI öğelerini güncelleyen mevcut işleyicilerin tümü güncellemelerini MainThread.BeginInvokeOnMainThread() içinde sararlar.IronBarcode tarafından kullanılan MediaPicker + async deseni ile, await döndüğünde devam etme, çoğunlukla ana iş parçacığı olan çağıran bağlamda olur. Çoğu durumda, MainThread.BeginInvokeOnMainThread() sarmalayıcılar kaldırılabilir, olay işleyici kodunu basitleştirir.
UPC-A Normalizasyonunun Kaldırılması
BarcodeScanning.Native.Maui'nin iOS için UPC-A 13 haneli davranışını ele alan herhangi bir kod tabanı, BarcodeFormats.Upca kontrol eden ve önceden sıfırı çıkarmak için Substring(1) çağıran koda sahip olacaktır. Göçten sonra bu kod kaldırılmalıdır —IronBarcode standart 12 haneli değeri döndürür ve normalizasyon yerinde bırakılırsa geçerli UPC-A okumalarından ilk hane yanlışlıkla kaldırılır.
MAUI İzinleri
BarcodeScanning.Native.Maui, paket kurulumu sırasında Android ve iOS manifestlerine kamera izinleri ekler. IronBarcode, MediaPicker kullandığında, AndroidManifest.xml ve Info.plist'deki standart MAUI kamera izinleri gereklidir — herhangi bir MAUI uygulamasının MediaPicker.CapturePhotoAsync() için ihtiyaç duyduğu aynı izinler. Bu izinler, genellikle kamerayı herhangi bir amaç için kullanan MAUI projelerinde zaten mevcuttur.
Ek IronBarcode Yetenekleri
Bu karşılaştırmada ele alınan yeteneklerin ötesinde, IronBarcode, BarcodeScanning.Native.Maui'nin hiçbir düzeyde ele almadığı özellikler sunar:
- Barkod Üretimi: Code128, QR, DataMatrix, PDF417 ve diğer formatları PNG, SVG veya bayt dizisi olarak üretin — MAUI UI, API yanıtlarında veya basılı etiketlerde kullanılabilir.
- QR Kod Üretimi: Logo gömme, renk özelleştirme ve hata düzeltme seviyesini kontrol ederek stilize edilmiş QR kodları oluşturun.
- Çoklu Barcode Okuma:
ExpectMultipleBarcodesseçeneği, tek bir görüntüdeki tüm barcode'ları bir geçişte okur. - PDF Barkod Çıkartılması: PDF belgelerine gömülü barkodları doğrudan okuyun — ara görüntü dönüşümü gerekmez.
- Sunucu-Tarafı Dağıtım: ASP.NET, Azure Functions, Docker ve AWS Lambda'da aynı barkod okuma ve üretim mantığını herhangi bir kamera bağımlılığı olmaksızın dağıtın.
- Okuma Hızı Yapılandırması:
ReadingSpeed.Faster,Balanced,DetailedveExtremeDetailayarları, görüntü kalitesine bağlı olarak throughput ile doğruluk arasında ince ayar yapmayı sağlar. - Sunucu ve Masaüstü Yeniden Kullanımı: Aynı kütüphane ASP.NET, konsol, WPF ve WinForms projelerinde çalışır, bu nedenle barkod mantığı bir MAUI istemcisi ve bir arka uç hizmeti arasında ikinci bir paket olmadan paylaşılabilir.
.NET Uyumluluğu ve Geleceğe Hazırlık
IronBarcode, .NET 6, .NET 7 ve .NET 8'i, ayrıca .NET Framework 4.6.2 ve sonrasını destekler. Bu, modern .NET hedeflerinde çalıştığı gibi, henüz göç etmemiş eski sunucu ortamlarında da çalışacağı anlamına gelir. BarcodeScanning.Native.Maui, .NET Framework desteği ve sunucu tarafı dağıtım yolu olmayan bir sadece MAUI kütüphanesidir. Kod tabanı hem MAUI'yi hem de mevcut .NET Framework veya .NET Core sunucu uygulamalarını kapsayan ekipler için IronBarcode, tüm ortamlar arasında tutarlı bir API sağlar ve her çalışma zamanı bağlamı için ayrı bir barkod paketi gerektirmez.
Sonuç
BarcodeScanning.Native.Maui ve IronBarcode, farklı sorunları ele alır. BarcodeScanning.Native.Maui, otomatik barkod algılama ile MAUI hedeflerine gerçek zamanlı bir vizör sağlayan bir kamera kontrol kütüphanesidir ve tanımayı üç farklı platform motoruna devreder. IronBarcode, .NET hedefleri üzerinden tek bir yönetilen motor aracılığıyla herhangi bir kaynaktan statik görüntü verilerini işleyen bir barkod okuma ve oluşturma kütüphanesidir. Mimari fark — sürekli kamera yayını ve ayrık veri girişi — hangi kütüphanenin belirli gereksinim seti için uygun olduğunu belirler.
BarcodeScanning.Native.Maui, canlı uygulama içi kamera önizlemesi ile sürekli çerçeve algılamanın gerekli UX deseni olduğu bir MAUI uygulaması olduğunda ve gereksinimlerin dosya yüklemeleri, PDF işleme veya sunucu tarafı barkod işlemesini içermeyecek şekilde genişlemeyeceği durumda doğru tercihtir. Bu kapsam içinde ücretsizdir, minimaldir ve işlevseldir.
IronBarcode, barkod girdisinin, canlı kameraya ek olarak veya yerine, dosyalardan, PDF'lerden veya bayt dizilerinden geldiğinde, sunucu tarafı barkod işlemesi mimarinin bir parçası olduğunda veya okuma ile birlikte barkod oluşturmanın gerekli olduğu durumlarda doğru tercihtir. Ayrıca, platformlar arası tutarlı kod çözme davranışı veya PDF417 güvenilirliğinin üretim gereklilikleri olduğunu durumlarda da uygundur. Bu yetenekler için ticari lisans maliyeti, verilen ödündür.
Gereksinimleri şu anda BarcodeScanning.Native.Maui'nin kapsamına uyan ekipler için, kütüphane makul ve ekonomik bir tercih olur. Gereksinimleri büyümüş veya canlı kamera taramasının ötesine geçmesi beklenen ekipler için, IronBarcode'un girdii türleri, platformlar ve dağıtım hedefleri arasında tutarlı API'si pratik bir alternatiftir.
Sıkça Sorulan Sorular
BarcodeScanning.MAUI nedir?
BarcodeScanning.MAUI, C# uygulamalarında barkod oluşturma ve okuma için bir .NET barkod kütüphanesidir. Geliştiricilerin .NET projeleri için barkod çözümü seçerken değerlendirdiği birkaç alternatiftir.
BarcodeScanning.MAUI ile IronBarcode arasındaki temel farklar nelerdir?
IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, BarcodeScanning.MAUI genellikle kullanım öncesi örnek oluşturma ve yapılandırmayı gerektirir. IronBarcode ayrıca tüm ortamlarda yerel PDF desteği, otomatik format algılama ve tek anahtar lisans sunar.
IronBarcode, BarcodeScanning.MAUI'ye göre lisanslanması daha kolay mı?
IronBarcode hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu, SDK anahtarlarını çalışma zamanı anahtarlarından ayıran lisanslama sistemlerine kıyasla CI/CD hatlarını ve Docker yapılandırmalarını basitleştirir.
IronBarcode, BarcodeScanning.MAUI'nin desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztek, EAN-13, UPC-A, GS1 ve daha birçokları dahil olmak üzere 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açıkça format sayımını gerektirmez.
IronBarcode doğal PDF barkod okuma desteği sunuyor mu?
Evet. IronBarcode, ayrı bir PDF render kütüphanesi gerektirmeden, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından doğrudan barkod okur. Sayfa bazında sonuçlar sayfa numarası, barkod formatı, değeri ve güven puanını içerir.
IronBarcode, BarcodeScanning.MAUI'ye kıyasla toplu işlemi nasıl ele alır?
IronBarcode'un statik yöntemleri durum terkibesizdir ve doğal olarak thread-safe'dir, bu da thread başına örnek yönetimi olmadan Parallel.ForEach'in doğrudan kullanımına olanak tanır. Herhangi bir fiyatlandırma seviyesinde bir throughput tavanı yoktur.
IronBarcode hangi .NET sürümlerini destekliyor?
IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunur.
Bir .NET projesine IronBarcode'u nasıl kurarım?
IronBarcode'u NuGet üzerinden kurun: Paket Yöneticisi Konsolunda 'Install-Package IronBarCode' komutunu veya CLI'da 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyicisi veya çalışma zamanı dosyası gerekmez.
IronBarcode'u satın almadan önce değerlendirebilir miyim, BarcodeScanning.MAUI'nin aksine?
Evet. IronBarcode'un deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek, barkod değerlerini tam olarak döndürür. Satın almadan önce, kendi belgelerinizde okuma doğruluğunu kıyaslayabilirsiniz.
BarcodeScanning.MAUI ve IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan, sürekli bir tek geliştirici lisansı için $749'dan başlar. Fiyat detayları ve hacim seçenekleri IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gerekliliği yoktur.
BarcodeScanning.MAUI'den IronBarcode'a geçiş yapmak kolay mı?
BarcodeScanning.MAUI'den IronBarcode'a geçiş esas olarak, örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisans gerekliliklerini kaldırmayı ve sonuç özelliği adlarını güncellemeyi içerir. Çoğu geçiş, kodun azaltılmasını içerir.
IronBarcode, logolu QR kodları üretebiliyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png'), konfigüre edilebilir hata düzeltme ile QR koduna yerel olarak bir marka görüntüsü yerleştirir. Renkli QR kodları, ChangeBarCodeColor() ile de desteklenir.

