Altbilgi içeriğine atla
VIDEOLAR

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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, BarCode NuGet 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üklemesi
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> }Read() dönüş değerini yineleyin
  • .addOnFailureListener { e -> }Read() etrafında try/catch kullanın
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 'i atlayın
  • using Google.MLKit.BarcodeScanning; (Xamarin bağlama) → using IronBarCode;
  • IronBarCode.License.LicenseKey, MauiProgram.cs, Program.cs veya Startup.cs iç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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara