C# ve IronBarcode Kullanarak .NET 5 için Barkodları Nasıl Okursunuz?
Google ML KitBarkod Tarama'dan IronBarcode'a Geçiş
Bu kılavuz, iki durumdan birinde olan ekipler içindir: bir Android uygulamasını .NET MAUI veya .NET 9'a aktarıyorsunuz ve ML Kit'in barkod okuyucusunu yönetilen bir alternatifle değiştirmeniz gerekiyor veya çapraz platform barkod tartışmasındaGoogle ML Kitönerildi ve NuGet paketini eklemeye gittiğinizde, onun mevcut olmadığını keşfettiniz.
Google ML Kit Barkod Taraması yerel bir Android ve iOS kütüphanesidir. Kotlin/Java için Maven bağımlılığı olarak (com.google.mlkit:barcode-scanning:17.3.0 paketli veya com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 paketsiz) ve Swift için CocoaPod olarak (GoogleMLKit/BarcodeScanning) sunulur. ML Kit, Haziran 2020'den beri bağımsız bir üründür ve artık Firebase gerektirmez, ancak resmi bir .NET SDK'sı, dotnet add package google-mlkit-barcode ve Google'dan gelen birinci taraf C# API yoktur. Yıllar içinde topluluk tarafından sürdürülen Xamarin/MAUI bağlamaları ortaya çıkmıştır ancak ML Kit temel SDK'sını güncellediğinde bozulmaktadırlar.
IronBarcode, NuGet'ten kurulan, standart .NET desenleriyle entegre olan ve Windows, Linux, macOS, Docker, Azure ve AWS üzerinde çalışan yerel bir .NET kütüphanesidir. Bu kılavuz, Kotlin veya Java'da yazdığınız desenleri eşdeğer C# koduna nasıl çevireceğinizi gösterir.
Geçiş Bağlamı
ML Kit'ten IronBarcode'a geçerken, sadece sözdizimsel değil, yapısal olarak birkaç değişiklik olur:
Geri çağrılar dönüş değerlerine dönüşür. ML Kit, Android'in Task API'sini addOnSuccessListener ve addOnFailureListener ile kullanır. IronBarcode'un BarcodeReader.Read() senkron bir şekilde bir koleksiyon döndürüyor. Onu doğrudan yineleyin. Geri çağırma kaydı yok, iş parçacığı koordinasyonu yok.
Tarayıcı nesnesi yok. ML Kit, bir BarcodeScannerOptions nesnesi oluşturmanızı, bir tarayıcı örneği almak için BarcodeScanning.getClient(options) çağırmanızı ve ardından scanner.process(inputImage) çağırmanızı gerektirir. IronBarcode, statik yöntemler kullanır — BarcodeReader.Read() giriş noktasıdır. Yönetilecek veya atılacak bir örnek yok.
InputImage yapısı yok. ML Kit'in InputImage nesnesi, Android'e özgü bir kaynaktan oluşturulmalı: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation) veya InputImage.fromMediaImage(image, rotation). IronBarcode, bir dosya yolu dizesi, Stream, byte[] veya System.Drawing.Bitmap kabul eder. Android bağlamı yok, URI yok, döndürme meta verisi yok.
Google Play Hizmetleri yok. Paketlenmemiş ML Kit modeli Google Play Hizmetleri üzerinden çalışır. Paketlenmiş varyant, modeli APK içine gönderir (yaklaşık 2,4 MB ekleyerek) ve Play Hizmetleri kontrolünü atlayarak çalışır, ancak hiçbiri .NET hedeflerinde mevcut değildir.IronBarcode böyle bir bağımlılığa sahip değil — .NET'in desteklediği herhangi bir platformda aynı şekilde çalışır.
.NET'te Hızlı Kurulum
Projenizde varsa herhangi bir Xamarin/MAUI ML Kit bağlama paketini kaldırın, ardından IronBarcode'u kurun:
dotnet add package BarCode
Lisans anahtarını uygulama başlangıcında, uygulama türünüze bağlı olarak Program.cs, MauiProgram.cs veya Startup.cs içinde ekleyin:
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Lisans, ilk BarcodeReader.Read() veya BarcodeWriter.CreateBarcode() çağrısından önce herhangi bir noktada ayarlanabilir. Ücretsiz deneme mevcuttur; deneme modundaki su işareti üretilen barkodlara su işareti uygular, ancak okumayı kısıtlamaz.
Barkod Okuma: Kotlin'den C#'a
Temel Tek Barkod Okuma
İşte Kotlin'de ML Kit ile tipik bir okuma, bir dosya URI'sinden tek bir QR kodu tarama:
// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
val barcode = barcodes.firstOrNull()
if (barcode != null) {
Log.d("MLKit", "Value: ${barcode.rawValue}")
Log.d("MLKit", "Format: ${barcode.format}")
}
}
.addOnFailureListener { e ->
Log.e("MLKit", "Scan failed: ${e.message}")
}
IronBarcode ile C#'ta eşdeğeri:
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
Imports IronBarCode
Try
Dim results = BarcodeReader.Read("captured-image.jpg")
Dim barcode = results.FirstOrDefault()
If barcode IsNot Nothing Then
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Format: {barcode.Format}")
End If
Catch ex As Exception
Console.WriteLine($"Scan failed: {ex.Message}")
End Try
Sonuç, doğrudan bir dönüş değeri olarak hemen mevcuttur. barcode.Value, barcode.rawValue ile uyuşur. barcode.Format, barcode.format ile uyuşur. Hata yönetimi, ayrı bir arıza dinleyicisi yerine standart try/catch kullanır.
Çoklu Barkod Okuma
ML Kit, tek bir InputImage tarar ve bir liste döndürür. Bir görüntüde birden fazla barkod varsa, başarı dinleyicisinin listesini yineleyin:
// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
val rawValue = barcode.rawValue
val format = barcode.format
processBarcode(rawValue, format)
}
}
.addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }
IronBarcode ile, ExpectMultipleBarcodes = true 'i BarcodeReaderOptions içinde ayarlayın ve sonuç koleksiyonunu yineleyin:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("warehouse-shelf.jpg", options)
For Each barcode In results
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}")
ProcessBarcode(barcode.Value, barcode.Format)
Next
Format Özellikleri: setBarcodeFormats'ten BarcodeReaderOptions'a
ML Kit, hangi formatları arayacağınızı setBarcodeFormats() ile belirtmenizi gerektirir. Onu atlamazsanız, ML Kit tüm formatları arar.IronBarcode aynı şekilde çalışır — format kısıtlamalarını atlamak her şeyi arar, ancak beklenen türleri belirtmek performansı artırır.
| ML Kit Kotlin | IronBarcode C# |
|---|---|
Barcode.FORMAT_QR_CODE |
BarcodeEncoding.QRCode |
Barcode.FORMAT_CODE_128 |
BarcodeEncoding.Code128 |
Barcode.FORMAT_CODE_39 |
BarcodeEncoding.Code39 |
Barcode.FORMAT_CODE_93 |
BarcodeEncoding.Code93 |
Barcode.FORMAT_EAN_13 |
BarcodeEncoding.EAN13 |
Barcode.FORMAT_EAN_8 |
BarcodeEncoding.EAN8 |
Barcode.FORMAT_UPC_A |
BarcodeEncoding.UPCA |
Barcode.FORMAT_UPC_E |
BarcodeEncoding.UPCE |
Barcode.FORMAT_PDF417 |
BarcodeEncoding.PDF417 |
Barcode.FORMAT_DATA_MATRIX |
BarcodeEncoding.DataMatrix |
Barcode.FORMAT_AZTEC |
BarcodeEncoding.Aztec |
Barcode.FORMAT_ITF |
BarcodeEncoding.ITF |
Barcode.FORMAT_CODABAR |
BarcodeEncoding.Codabar |
Barcode.FORMAT_ALL_FORMATS |
ExpectBarcodeTypes 'i atlayın |
IronBarcode'da format bayraklarını kullanma:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}
Dim results = BarcodeReader.Read("product-image.jpg", options)
Bitwise OR kombinasyonu, ML Kit'in vararg format listesi ile aynı şekilde çalışır.
Sonuç Erişimi: rawValue ve format
ML Kit'in sonuç nesnesi rawValue (bir String?) ve format (bir Int sabit değeri) sunar. IronBarcode'un sonuç nesnesi Value (bir string) ve Format (bir BarcodeEncoding enum değeri) sunar.
//ML Kit Kotlin— result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
'IronBarcode VB.NET— result fields
Dim value As String = barcode.Value
Dim format As BarcodeEncoding = barcode.Format
Dim page As Integer = barcode.PageNumber ' populated for PDF / multi-page input
barcode.Value, IronBarcode'da her zaman null olmayan bir dizedir - okuma başarılıysa, değer mevcuttur. barcode.Format, doğrudan karşılaştırabileceğiniz BarcodeEncoding enum üyesidir: if (barcode.Format == BarcodeEncoding.QRCode).
.NET'te Ne Farklı
Geri çağırma yerine senkron API. Bu en önemli yapısal değişikliktir. ML Kit'in scanner.process(), Android anlamında bir Task<List<Barcode>> döndürür — dinleyicileri zincirlersiniz. IronBarcode'un BarcodeReader.Read(), sonucu satır içinde döndürür. Bir MAUI uygulamasında UI iş parçacığından uzak çalıştırmanız gerekiyorsa, Task.Run() içinde sarın:
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
Imports IronBarCode
Imports System.Threading.Tasks
Imports Microsoft.Maui.Dispatching
' In a MAUI ViewModel or page code-behind
Dim results = Await Task.Run(Function() BarcodeReader.Read(imagePath))
For Each barcode In results
' update UI on main thread
MainThread.BeginInvokeOnMainThread(Sub()
ResultLabel.Text = barcode.Value
End Sub)
Next
Bağlam parametresi yok. Bir InputImage oluşturan her ML Kit çağrısı, bir Android Context gerektirir.IronBarcode yalnızca bir dosya yolu veya akışa ihtiyaç duyar. Barkod mantığından bağlam iş parçacığı yönetimini kaldırmak, kodu önemli ölçüde basitleştirir.
Google Play Hizmetleri yok. Standart ML Kit modeli Play Hizmetleri aracılığıyla çalışır - BarcodeScanning.getClient(), Çalışma zamanında Play Hizmetleri kullanılabilirliğini kontrol eder ve kullanılamıyorsa hata verir. IronBarcode'da çalışma zamanı hizmeti kontrolü yoktur. Ya resmi okur ya da standart bir hata fırlatır.
Standart istisna işlemesi. ML Kit'in addOnFailureListener, bir Java Exception alt sınıfı alır. .NET'te, hatalar standart System.Exception hataları olarak yüzeye çıkar, normal yolla try/catch ile yakalanabilir.
PDF Belgelerden Okuma
ML Kit'in PDF desteği yoktur. Bir InputImage.fromFilePath() URI'si ya başarısız olur ya da Android sürümüne bağlı olarak yalnızca ilk sayfayı rasterleştirilmiş bir görüntü olarak okur. Aktarma senaryonuz belgeleri içeriyorsa — fatura işleme, lojistik manifestolar, form tarama —IronBarcode PDF'leri yerel olarak işler:
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode
' Read all barcodes from all pages of a PDF
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("invoice-batch.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
Görüntü çıkartma adımı yok, üçüncü taraf PDF kütüphanesi yok, ayrı render ile sayfa yineleme döngüsü yok. PDF yolunu geçin, sayfalarıyla birlikte tüm barkod değerlerini geri alın.
Yeni Yetenekler: Üretim
ML Kit barkod üretmez — yalnızca okur. Aktardığınız uygulamanız etiketi, bileti veya QR kodları üretmesi gerekiyorsa,IronBarcode aynı pakette bu kapsamı içerir.
Gönderi etiketleri için Code 128:
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.SaveAsPng("shipping-label.png")
QR kod oluşturma:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500) _
.SaveAsPng("tracking-qr.png")
Logo ve renk içeren QR kod:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500) _
.AddBrandLogo("company-logo.png") _
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue) _
.SaveAsPng("product-qr.png")
HTTP yanıtı için bayt dizisi olarak barkodu döndürme:
using IronBarCode;
// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
using IronBarCode;
// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
Imports IronBarCode
' In an ASP.NET Core controller action
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode) _
.ToPngBinaryData()
Return File(barcodeBytes, "image/png")
Bu desenlerin ML Kit eşdeğerleri yoktur. Tam .NET barkod kütüphanesinde çalışarak kullanılabilir yeni kapasiteler.
Sunucu Tarafı Yığın İşleme
ML Kit, çağrı başına bir görüntü işler, Android/iOS çalışma zamanı gerektirir ve sunucu tarafı yürütme kavramına sahip değildir. IronBarcode, dosyaları bir döngüde işler, ASP.NET Core'da çalışır ve normal olarak ölçeklenir:
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
Imports IronBarCode
Imports System.IO
' Process a folder of scanned document images
Dim imageFiles = Directory.GetFiles("/data/scans", "*.jpg")
Dim allResults = New List(Of (File As String, Value As String, Format As BarcodeEncoding))()
For Each file In imageFiles
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Faster,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read(file, options)
For Each barcode In results
allResults.Add((file, barcode.Value, barcode.Format))
Next
Next
' Write results to CSV, database, etc.
For Each result In allResults
Console.WriteLine($"{result.File}: [{result.Format}] {result.Value}")
Next
Bu desen — görüntüleri bir klasörden okuma, barkodları çıkarma, sonuçları toplama — ML Kit ile mümkün değildir. Bu, standart bir IronBarcode iş akışıdır.
Özellik Karşılaştırması
| Özellik | Google ML Kit | IronBarcode |
|---|---|---|
| .NET NuGet paketi | None | BarCode |
| C# / .NET API | None | Evet |
| Barkod okuma | Evet (Android/iOS) | Evet (tüm platformlar) |
| Barkod oluşturma | Hayır | Evet |
| QR kod üretimi | Hayır | Evet |
| QR logo yerleştirme | Hayır | Evet |
| PDF girdisi | Hayır | Evet |
| Çok sayfalı belge desteği | Hayır | Evet |
| Kamera/kare girdisi | Evet | Görüntü dosyası üzerinden |
| Sunucu tarafı dağıtım | Hayır | Evet |
| ASP.NET Core | Hayır | Evet |
| Azure Functions | Hayır | Evet |
| Docker / Linux | Hayır | Evet |
| Google Play Hizmetleri gerekli | Yalnızca paketlenmemiş varyant | Hayır |
| Firebase bağımlılığı | Hayır (Haziran 2020'den beri bağımsız) | Hayır |
| Senkron .NET API | Hayır | Evet |
| Bağımlılık enjeksiyon dostu | Hayır | Evet (statik API) |
ExpectMultipleBarcodes seçeneği |
Sonuç listesi üzerinden | BarcodeReaderOptions |
| Biçim belirtimi | setBarcodeFormats() |
ExpectBarcodeTypes |
| Hız/doğruluk takası | Sabit (model tabanlı) | ReadingSpeed enum |
| Fiyatlandırma | Ücretsiz (cihaz üzerinde, yalnızca mobil) | $749'dan itibaren (Lite) süresiz |
| Platformlar | Android, iOS | Windows, Linux, macOS, Docker, Azure, AWS |
Geçiş Kontrol Listesi
Android kod tabanını aktarıyorsanız veya gayri resmi bir Xamarin ML Kit bağlama değiştiriyorsanız, projeinizde bu desenleri arayın ve yukarıdaki çevirileri uygulayın:
- Gradle dosyalarındaki
com.google.mlkit:barcode-scanning→ kaldırın,BarCodeNuGet ekleyin BarcodeScannerOptions.Builder()→new BarcodeReaderOptions { }BarcodeScanning.getClient(options)→ kaldır (IronBarcode'da tarayıcı örneği yok)InputImage.fromFilePath(context, uri)→ dosya yolu dizisi argümanıInputImage.fromBitmap(bitmap, rotation)→BarcodeReader.Read(stream)veya bayt dizisi aşırı yüklemesiscanner.process(inputImage)→BarcodeReader.Read(path, options).addOnSuccessListener { barcodes -> }→Read()dönüş değerini yineleyin.addOnFailureListener { e -> }→Read()etrafında try/catch kullanınbarcode.rawValue→barcode.Valuebarcode.format→barcode.FormatBarcode.FORMAT_QR_CODE→BarcodeEncoding.QRCodeBarcode.FORMAT_CODE_128→BarcodeEncoding.Code128Barcode.FORMAT_ALL_FORMATS→ExpectBarcodeTypes'i atlayınusing Google.MLKit.BarcodeScanning;(Xamarin bağlama) →using IronBarCode;IronBarCode.License.LicenseKey,MauiProgram.cs,Program.csveyaStartup.csiçinde ayarlanmalıdır
Geri çağırma tabanlı koddan senkron koda yapısal değişim ana çalışmadır. Format sabitleri ve sonuç alanı adları doğrudan eşlemelerdir. PDF ve üretim desteği tamamen eklentiseldir — hiçbir geçiş gerektirmez, sadece yeni kod.
Sıkça Sorulan Sorular
Neden Google ML Kit Barkod Taramadan IronBarcode'a geçiş yapmalıyım?
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.
Google ML Kit 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.
Google ML Kit Barkod Taramadan IronBarcode'a geçiş sırasında ne kadar kod değişiyor?
Ç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 Google ML Kit Barkod Tarama hem de IronBarcode'un yüklü kalması gerekiyor mu?
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, Docker dağıtımını Google ML Kit Barkod Taramaya kıyasla nasıl kolaylaştırır?
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, Google ML Kit'ten göç ettikten 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.
Google ML Kit Barkod Taramadan IronBarcode'a geçiş yaparken hangi sonuç özellikleri değişiyor?
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.

