IRONSOFTWAREHOME
DIĞER BILEŞENLERLE KARŞILAŞTIRIN

ZXing.Net vs IronBarcode: 2026'da .NET Barkod Kütüphanesi Seçimi

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

ZXing.Net'in BarcodeReader iş parçacığına güvenli değildir. Uygulamanızdaki her eşzamanlı okuma yolu — her paralel ForEach, eşzamanlı istekleri işleyen her asenkron denetleyici eylem — kendi okuyucu örneğini gerektirir. Bu, her örnek için biçim yapılandırmasının tekrarlanması, her çağrı için Bitmap yükleme ve imha ve her istek için okuyucu tahsisi anlamına gelir. IronBarcode'un statik metodu, aynı işi istek başına tahsis yapmadan yürütür. İş parçacığı güvenliği, listedeki sadece bir öğedir: yerel PDF desteği yok, Windows ve Linux üzerindeki bağlayıcı paket fragmantasyonu ve her taramak istediğiniz barkod formatını belirtme gereksinimi — bu, ZXing.Net projelerinin zamanla araı çözümü biriktirmeye neden olan özelliklerdir.

ZXing.Net Anlamak

ZXing.Net, Google'ın Java ZXing ("Zebra Crossing") kütüphanesinin açık kaynaklı bir portudur,Apache 2.0lisansı altında yayımlanmıştır ve GitHub üzerinde Michael Jahn tarafından sürdürülmektedir. .NET için en çok indirilen açık kaynaklı barkod kütüphanesidir, on yıldan fazla bir döneme yayılmış uzun bir sicili vardır. Kütüphane, sıfır maliyetli lisansı sayesinde, geniş bir barkod formatları setinde okuma ve yazmayı kapsar ve Apache uyumlu bağımlılıklar içeren açık kaynaklı ürünler dahil, tüm boyuttaki projeler için erişilebilir kılar.

ZXing.Net'in mimarisi, bir Java portu kökenlerini yansıtır. BarcodeReader sınıfı, durumsal bir nesnedir: Decode çağrılınca iç durum yazılır, bu da örneklerin iş parçacıkları arasında paylaşılması güvenli olmadığını gösterir. Doğru eşzamanlı kullanım, her iş parçacığı için yeni bir okuyucu veya bir ThreadLocal<BarcodeReader> havuzu gerektirir - her ikisi de iş parçacığı güvenliği sorumluluğunu çağırana yükler. Görüntü yükleme, çekirdek paket dahilinde değildir; Bunun yerine, ZXing.Net her biri farklı bir API yüzeyini açığa çıkaran platforma özgü bağlama paketleri sağlar.

Ana mimari özellikler şunları içerir:

  • Apache 2.0 Lisansı: Ticari ve açık kaynaklı kullanım için ücretsiz, maliyetsiz ve satış takımına gerek duymaksızın.
  • Durumsal BarcodeReader: BarcodeReader örneği iş parçacığına güvenli değildir; iş parçacığı başına veya paralel işlemi başına yeni bir örnek oluşturulmalıdır.
  • Manuel Biçim Belirtme: Her çözümlemeden önce arayanların reader.Options.PossibleFormats ayarlaması gerekir; listelenmeyen formatlar sessizce atlanır, hata veya uyarı verilmez.
  • Yerel PDF Desteği Yok: Kütüphane yalnızca görüntüleri okur; PDF girişi, sayfaları bitmap'e dönüştürmek için PdfiumViewer gibi ayrı bir PDF oluşturma kütüphanesi gerektirir.
  • Platform Bağlama Fragmantasyonu: Çekirdek paket görüntü yüklemesi sağlamaz; ayrı bağlama paketleri (ZXing.Net.Bindings.Windows.Compatibility System.Drawing kullanarak, SixLabors.ImageSharp kullanarakZXing.Net.Bindings.ImageSharp / .V2 / .V3artı ZXing.Net.Bindings.SkiaSharp ve ZXing.Net.Bindings.Magick) farklı dağıtım hedefleri için farklı API'lar sunar.
  • Aktif Topluluk: GitHub'da sorunlar, pull request'ler ve tartışmalar aktiftir, topluluk düzeyinde destek ücretsiz olarak sağlanır.
  • Geniş Format Desteği: QR Kod, Code 128, Code 39, EAN-13, EAN-8, UPC-A, Data Matrix, PDF 417, Aztek ve diğer yaygın kullanılan simbolojileri destekler.

Durumlu Okuyucu Mimarisi

ZXing.Net'in BarcodeReader her iş parçacığı veya paralel işlem için yeni bir örnek gerektirir. Aşağıdaki desen, eş zamanlı işleme için minimum doğru kurulum gösterir:

// ZXing.Net: a new reader instance is created per iteration
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});

ThreadLocal<BarcodeReader> deseni, her çağrı için tahsisi azaltır ve her iş parçacığı için bir örneği yeniden kullanır, ancak imha karmaşıklığı ekler. Her iki durumda da, ZXing.Net'te iş parçacığı güvenliği arayan kişinin sorumluluğundadır.

IronBarcode Anlama

IronBarcode, Iron Software tarafından geliştirilen ticari bir .NET barkod kütüphanesidir. Bu, durumsuz statik API üzerinden barkod okuma ve oluşturma sağlar: BarcodeReader.Read ve BarcodeWriter.CreateBarcode ana giriş noktalarıdır ve kullanmadan önce herhangi bir örnek oluşturma veya yapılandırma gerektirmez. Kütüphane, platforma özgü bağlama paketlerine ihtiyaç duymadan, Windows, Linux,macOSve Docker konteynerlerinde aynı şekilde çalışan tek bir NuGet paketi olarak gönderilir.

IronBarcode'un okuma motoru, 50'den fazla barkod sembolojisi üzerinde otomatik format algılama gerçekleştirir. Arayanlar hangi formatları arayacaklarını belirtmez; motor, her bir görüntüyü desteklenen tüm formatlara karşı değerlendirir ve bulunan tüm barkodları döndürür. Tarama hızını titizlikle dengelemek zorunda olan uygulamalar için, bir ReadingSpeed enumu (Faster, Balanced, Detailed, ExtremeDetail) kontrol sağlar, ancak biçim sayımı gerektirmez. Kütüphane aynı zamanda tüm sayfalarda PDF dökümanlarındaki barkodları doğrudan okuyarak, ayrı bir PDF işleme kütüphanesine ihtiyaç duymadan yerel PDF desteğini de içerir.

Anahtar özellikler şunları içerir:

  • Ticari Lisans: Ücretli bir lisans anahtarı gerektirir; değerlendirme için deneme modu mevcuttur.
  • Durumsuz Statik API: BarcodeReader.Read ve BarcodeWriter.CreateBarcode iş parçacığına güvenli statik yöntemlerdir; örnek yönetimi gerektirmez.
  • Otomatik Format Algılama: Desteklenen tüm 50+ barkod formatı, format listesi olmadan algılanır; arayanlar hızı format kapsamına göre ayarlar.
  • Yerel PDF Desteği: BarcodeReader.Read PDF dosya yollarını doğrudan kabul eder ve herhangi bir harici PDF kütüphanesi olmadan tüm sayfaları işler.
  • Tek Platformlar Arası Paket: Tek bir NuGet paketi, Windows, Linux,macOSve Docker'da aynı API yüzeyiyle çalışır.
  • Akıcı Üretim API'si: BarcodeWriter.CreateBarcode, GeneratedBarcode nesnesiyle birlikte yerleşik çıktı yöntemleri döndürür, bu yöntemler arasında SaveAsPng, SaveAsPdf, ToPngBinaryData ve ToStream bulunur.
  • Ticari Destek: Ücretli lisanslar, Iron Software'ın destek ekibine hizmet seviyesinde taahhütlerle erişim sağlar.

Özellik Karşılaştırması

Aşağıdaki tablo, ZXing.Net ve IronBarcode arasındaki temel farkları vurgular:

ÖzellikZXing.NetIronBarcode
LisansApache 2.0 (ücretsiz)Ticari
İş Parçacığı Güvenliğiİş parçacığı güvenli değil — her iş parçacığı için yeni örnek gerekiyorİş parçacığı güvenli statik API
Format AlgılamaManuel — gerekli PossibleFormats listesiOtomatik — 50+ format
PDF OkumaHayır — PdfiumViewer veya benzeri gerekiyorYerel — tek bir yöntem çağrısı
Platform DesteğiHer platform için ayrı bağlama paketleriTek paket, tüm platformlar
Barkod ÜretimiBitmap döndürür, manuel kaydetme gerektirirYerleşik çıkışa sahip akıcı API
FiyatlandırmaÜcretsiz$999'dan (Lite) / $1.499'dan (Plus)

Ayrıntılı Özellik Karşılaştırması

ÖzellikZXing.NetIronBarcode
Okuma
İş Parçacığı güvenli okumaHayır — iş parçacığı başına örnekler gerekliEvet — stateless statik API
Otomatik format algılamaHayır — PossibleFormats gereklidirEvet — tüm formatlar otomatik algılanır
Her görüntüde birden fazla barkodEvet — DecodeMultipleEvet — varsayılan davranış
PDF barkod okumaHayır — harici kütüphane gerekliEvet — yerel
Hasarlı barkod kurtarmaTryHarder bayrağıML destekli görüntü düzeltme
Hız/doğruluk ayarlamasıFormat listesi azaltılmasıReadingSpeed enumu
Üretim
Code 128 / Code 39EvetEvet
QR KoduEvetEvet
Logo ile QR KodHayırEvet
QR Kod renk özelleştirmesiHayırEvet
PNG/JPEG/PDF'ye çıkışManuel olarak System.Drawing ileYerleşik çıkış yöntemleri
Akıcı oluşturma zinciriHayırEvet
Platform ve Uygulama
Windows (System.Drawing)Evet — ZXing.Net.Bindings.Windows.CompatibilityEvet
Linux / DockerEvet —ZXing.Net.Bindings.ImageSharp / .V2 / .V3(farklı API)Evet — aynı API
macOSEvet — ZXing.Net.Bindings.ImageSharp / .V2 / .V3Evet
Docker ekstra bağımlılıklarılibgdiplus gerekebilirNone
Tek bir NuGet paketiHayır — çekirdek + bağlama + isteğe bağlı ImageSharpEvet
Lisanslama ve Destek
Lisans türüApache 2.0Ticari
MaliyetÜcretsiz$999'dan itibaren
Topluluk desteğiGitHub sorunları, aktif toplulukEvet
Ticari SLA desteğiHayırEvet
Açık kaynak dostuEvetHayır

İş Parçacığı Güvenliği ve Eşzamanlı İşleme

İş parçacığı güvenliği, iki kütüphane arasındaki en önemli operasyonel farktır ve dokümantasyon uyarılarının düşündürdüğünden daha fazla projeyi etkiler.

ZXing.Net Yaklaşımı

ZXing.Net'in BarcodeReader durumsal bir nesnedir. Decode çağrıldığında, iç durum yazılır. İki iş parçacığı aynı örneği paylaşırsa, bu yazılar yarışır. Sonuçlar kesindir: farklı bir görüntüden bir sonuç alabilirsiniz, bir barkodun olduğu yerde null, veya bir istisna. Doğru yaklaşım, her iş parçacığı için bir okuyucu oluşturmak — yani her paralel veya eşzamanlı yol bir okuyucu ayırır, yapılandırır, bir kez kullanır ve atar:

// ZXing.Net: one reader instance per parallel operation
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});

ThreadLocal<BarcodeReader> deseni, her çağrı için tahsisi azaltır ve her iş parçacığı için bir okuyucu yeniden kullanır, ancak imha karmaşıklığını ekler ve yine de her örnek için biçim yapılandırması gerektirir.

IronBarcode Yaklaşımı

IronBarcode'un BarcodeReader.Read durumsuz bir statik yöntemdir. Paylaşılacak bir örnek yok, izole edilecek bir örnek yok ve korunacak bir yapılandırma durumu yoktur. Aynı çağrı, herhangi bir sayıda eşzamanlı iş parçacığından güvenli bir şekilde çalışır:

// IronBarcode: static method — no instance management
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

Parallel.ForEach(imagePaths, path =>
{
    var result = BarcodeReader.Read(path, options).FirstOrDefault();
    if (result != null)
        results[path] = result.Value;
});

IronBarcode'un senkron ve eşzamanlı barkod okuma belgeleri, dahili iş parçacığı havuzlama modelini açıklar. MaxParallelThreads özelliği, harici koordinasyon gerektirmeden eşzamanlılık derecesini kontrol eder.

Format Algılama

Format algılama politikası, iki kütüphane arasındaki ikinci önemli operasyonel farktır.

ZXing.Net Yaklaşımı

ZXing.Net, her çözümleme öncesinde reader.Options.PossibleFormats doldurulmasını gerektirir. Bir barkod formatı listelenmemişse, algılanmaz — hata yok, uyarı yok, kısmi sonuç yok:

// ZXing.Net: PossibleFormats list controls which symbologies are decoded
var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.CODE_39,
    BarcodeFormat.EAN_13,
    BarcodeFormat.EAN_8,
    BarcodeFormat.UPC_A,
    BarcodeFormat.DATA_MATRIX,
    BarcodeFormat.PDF_417
};
reader.Options.TryHarder = true;

using var bitmap = new Bitmap(imagePath);
var results = reader.DecodeMultiple(bitmap);

Her formatı eksikliği önlemek için listelemek, performansı düşürür. Yalnızca beklenen formatlar listelenmişse, eksik algılama dış kaynaklardan gelen görüntülerle bir risk haline gelir. ZXing.Net'in listelenmemiş bir formatta bir barkod bulduğu bildirimi için bir mekanizma yoktur.

IronBarcode Yaklaşımı

IronBarcode, desteklenen tüm 50+ formatı otomatik olarak algılar. Format listesi gerekmez veya kabul edilmez:

// IronBarcode: automatic detection across all supported formats
var results = BarcodeReader.Read(imagePath);
foreach (var barcode in results)
{
    Console.WriteLine($"{barcode.Value} ({barcode.Format})");
}

Tarama hızı algılama titizliğine karşı ayarlayan uygulamalar için,IronBarcode bir ReadingSpeed enumu sunar — Faster, Balanced, Detailed, ExtremeDetail — biçim sayımı gerektirmeden. Hız ayarlaması, motorun her görüntüyü ne kadar agresif işlediğini etkiler, hangi formatları dikkate alacağını değil.

PDF Döküman Desteği

PDF okuma, ZXing.Net'te zor bir sınırdır: kütüphanenin herhangi bir türde PDF desteği yoktur.

ZXing.Net Yaklaşımı

Bir barkod PDF içinde yerleşik geldiğinde, ZXing.Net harici bir PDF işleme kütüphanesi gerektirir. En yaygın çözüm PdfiumViewer kullanmaktır ki bu, yaklaşık 20 MB yerel ikili dosyaların eklenmesini ve arayanların uygulayıp sürdürmesi gereken bir sayfa işleme döngüsünü ekler.

// ZXing.Net: PDF input is handled by PdfiumViewer with a per-page render loop
using var pdfDocument = PdfDocument.Load(pdfPath);

var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.PDF_417
};

for (int i = 0; i < pdfDocument.PageCount; i++)
{
    string tempPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png");
    try
    {
        using var pageImage = pdfDocument.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
        pageImage.Save(tempPath, ImageFormat.Png);

        using var bitmap = new Bitmap(tempPath);
        var decoded = reader.DecodeMultiple(bitmap);
        if (decoded != null)
            results.AddRange(decoded.Select(d => d.Text));
    }
    finally
    {
        File.Delete(tempPath);
    }
}

Bu modelin gerçek hata modları vardır: DPI yanlış yapılandırılması sessiz eksikliklere neden olur, sıkılaştırılmış ortamlarda geçici dosya izinleri başarısız olur, PdfiumViewer yerel kütüphaneleri ayrı bir dağıtım yönetimi gerektirir ve kurulum ek yapılandırma olmadan Linux'ta çalışmaz.

IronBarcode Yaklaşımı

IronBarcode barkodları PDF'lerden yerel olarak okur — tüm sayfalar, tüm formatlar, herhangi bir harici bağımlılık yok. Aynı BarcodeReader.Read çağrısı PDF yollarını doğrudan kabul eder:

// IronBarcode: one call processes every page of the PDF
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}");

Sayfa numaralandırma yok, DPI yapılandırması yok, geçici dosyalar yok ve uygulamayla birlikte dağıtılacak ayrı bir kütüphane yok.

Platform Bağlantıları ve Dağıtım

ZXing.Net'in görüntü işleme, her biri farklı bir API yüzeyine sahip platforma özgü bağlama paketleri arasında dağıtılmıştır.

ZXing.Net Yaklaşımı

Temel ZXing.Net paketi, kod çözme mantığı sağlar ancak görüntü yükleme içermez. Arayanlar, dağıtım hedeflerine göre bir bağlamayı seçmelidir:

OrtamPaketNotlar
Windows masaüstü / WPFZXing.Net.Bindings.Windows.CompatibilitySystem.Drawing kullanır — Windows dostu; Linux'ta libgdiplus gerektirir
Linux / Docker / platformlar arasıZXing.Net.Bindings.ImageSharp / .V2 / .V3Farklı API yüzeyi; SixLabors.ImageSharp bağımlılığı (V2/V3 sürümler ImageSharp ana versiyonlarını takip eder) ekler
macOSZXing.Net.Bindings.ImageSharp / .V2 / .V3Linux ile aynı yol

Pratik sonrasında, System.Drawing.Bitmap kullanan Windows kodu Linux'ta çalışmaz veya derlenemez. Konteynerleştirme, bağlama paketlerinin değiştirilmesini ve görüntü yükleme kodunun yeniden yazılmasını gerektirir:

// Windows binding path — uses System.Drawing
using ZXing.Windows.Compatibility;
using System.Drawing;

var reader = new BarcodeReader();
using var bitmap = new Bitmap(imagePath);
var result = reader.Decode(bitmap);
// Cross-platform path — different package, different API
using ZXing.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var reader = new BarcodeReader<Rgba32>();
using var image = Image.Load<Rgba32>(imagePath);
var result = reader.Decode(image);

Bir Linux ana bilgisayarında Windows bağlamasını kullanmak, aynı zamanda Docker görüntüsüne libgdiplus eklemeyi gerektirir ve bu, kaba tahminlerle konteynere yaklaşık 50 MB ekler.

IronBarcode Yaklaşımı

IronBarcode tüm platformlar için tek bir paket gönderir. Aynı BarcodeReader.Read(path) çağrısı, Windows, Linux,macOSve Docker konteynerlerinde aynı şekilde derlenir ve çalışır. Bağlama paketleri yok, platform koşulları yok ve ek sistem bağımlılıkları yok. .NET uygulamalarını konteynerleştiren ekipler için, IronBarcode Docker ve Linux kurulum rehberi tek paket dağıtım modelini ayrıntılı olarak açıklar.

Oluşturma API'si

Her iki kütüphane de barkod üretir, ancak API'ler farklı tasarım yaklaşımlarını yansıtır.

ZXing.Net Yaklaşımı

ZXing.Net'in BarcodeWriter sınıfı bir yazar nesnesi oluşturur, kodlama seçeneklerini kabul eder, Write çağırır ve arayanların System.Drawing.Imaging kullanarak manuel olarak kaydetmeleri gereken bir Bitmap döndürür:

// ZXing.Net: create writer, set options, call Write, save Bitmap
using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using System.Drawing.Imaging;

var writer = new BarcodeWriter
{
    Format = BarcodeFormat.CODE_128,
    Options = new EncodingOptions
    {
        Width = 300,
        Height = 100,
        Margin = 10
    }
};

using var bitmap = writer.Write("PRODUCT-001");
bitmap.Save("output.png", ImageFormat.Png);

PNG veya JPEG dışında formatlara kaydetmek, bir PDF'ye kaydetmek veya bir HTTP yanıtı için ikili çıktı oluşturmak, arayanın uyguladığı ek System.Drawing tesisatı gerektirir.

IronBarcode Yaklaşımı

IronBarcode'un BarcodeWriter.CreateBarcode, yerleşik çıktı yöntemleri sağlayan akıcı bir zincirle GeneratedBarcode nesnesi döndürür:

// IronBarcode: create and save in one fluent chain
BarcodeWriter.CreateBarcode("PRODUCT-001", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("output.png");

GeneratedBarcode nesnesi, ZXing.Net'in arayanların System.Drawing kullanarak kendilerinin uygulamasını gerektirdiği .ToPngBinaryData(), .ToJpegBinaryData(), .ToStream() ve .SaveAsPdf() gibi çıkış hedeflerini de açığa çıkarır.

API Eşleme Başvurusu

ZXing.NetIronBarcodeNotlar
new BarcodeReader()Statik — örnek yokBarcodeReader.Read(...) statik bir çağrıdır
reader.Options.PossibleFormats = new List<BarcodeFormat> { ... }Gerekli değilOtomatik algılama tüm formatları kapsar
reader.Options.TryHarder = trueSpeed = ReadingSpeed.BalancedBarcodeReaderOptions ile hassasiyet ayarı
reader.Decode(bitmap)BarcodeReader.Read(imagePath)Yolu doğrudan geçin — Bitmap gerekmez
reader.DecodeMultiple(bitmap)BarcodeReader.Read(imagePath)Her zaman bir koleksiyon döndürür
result.Textresult.ValueÖzellik yeniden adlandırıldı
result.BarcodeFormatresult.FormatÖzellik yeniden adlandırıldı
BarcodeFormat.QR_CODEBarcodeEncoding.QRCodeEnum adlandırma kuralı değişikliği
BarcodeFormat.CODE_128BarcodeEncoding.Code128Enum adlandırma kuralı değişikliği
BarcodeFormat.EAN_13BarcodeEncoding.EAN13Enum adlandırma kuralı değişikliği
new BarcodeWriter { Format = BarcodeFormat.CODE_128, Options = new EncodingOptions { ... } }BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)Statik fabrika yöntemi
writer.Write(data), Bitmap döndürür.SaveAsPng(path) / .ToPngBinaryData()GeneratedBarcode üzerinde yerleşik çıktı yöntemleri
PDF desteği yok — PdfiumViewer gerekliBarcodeReader.Read("doc.pdf")Yerel PDF desteği
İş parçacığı güvenli değilİş parçacığı güvenli statik APIÖrnek yönetimi gerekmez

Ekipler ZXing.Net'ten IronBarcode'a Geçmeyi Düşündüğünde

Belirli senaryolar, geliştirme ekiplerini ZXing.Net'e alternatif olarak IronBarcode'u değerlendirmeye yönlendiriyor.

Eşzamanlı ve Yüksek Hızda İşlem

Tek iş parçacıklı bir konsol uygulamasında doğru çalışan bir ZXing.Net entegrasyonu, aynı kod birden çok eşzamanlı isteği işleyen bir ASP.NET Core denetleyicisine taşındığında veya paralel işlemleri işleyen bir arka plan işine taşındığında belirlenemeyen davranış sergileyebilir. ZXing.Net'in gerektirdiği iş parçacığı başına örnek modeli, her isteğin veya paralel görevin kendisi için yapılandırılmış bir kod çözücü seti olan bir tüm okuyucu nesnesi ayırmasını, bir kez kullanmasını ve atmasını gerektirir. İstek hacmi arttıkça, bu ayırma baskısı ölçülebilir hale gelir. Bu noktaya ulaşan ekipler — özellikle lojistik, ambarlama veya belge işleme gibi yüksek hızda tarama hatları çalıştıranlar — genellikle iş parçacığı modelinin her arayana bu yükü getirmeyen bir kütüphaneyi ararlar.

Karışık Format Belge Tarama

Üçüncü taraflardan belgeleri alan uygulamalar, format listesi yapılandırıldığında öngörülemeyen barkod formatları sık sık karşılaşır. Code 128 için oluşturulmuş bir nakliye entegrasyonu, QR kodları kullanan bir ortakdan bir sevkiyat alır. PDF 417 için yapılandırılmış bir sahiplik sistemi, yeni bir ekipman satıcısından Data Matrix sembolojileriyle karşılaşır. ZXing.Net'te her biri, bir kod çözme hatası yerine sessiz bir null üretir, bu, kaçırmanın aşağı yönde işleme düştüğü ana kadar yüzeye çıkmayabileceği anlamına gelir. Sessiz format eksikliklerinden dolayı sorun yaşamış ekipler — özellikle bir yanlış barkodun iş sonuçlarına neden olduğu bağlamlarda — format listesinin bakım maliyetini otomatik olarak formatları algılayan bir kütüphaneye karşı tartmaya başlarlar.

PDF Barkod Çıkışı

Birçok iş belgesi PDF olarak gelir: faturalar, sevk notları, hasta kayıtları, uyumluluk sertifikaları. ZXing.Net bunları doğrudan okuyamaz. PDF'lerden barkod çıkarması gereken ekipler, ZXing.Net üstüne bir işleme hattı oluşturup sürdürürler — bir PDF kütüphanesi seçmek, yerel bağımlılıklarını yönetmek, bir sayfa işleme döngüsü uygulamak, DPI yapılandırmasını ele almak ve geçici dosyaların temizleme mantığını yazmak. Bu altyapı kodu barkod mantığı değildir; ZXing.Net'in kabul ettiği şey (bitmapler) ile iş belgelerinin gerçekten ne olduğu (PDF'ler) arasındaki boşluğu kapatmak için var olur. Bu köprüyü koruyan ekipler — özellikle PDF kütüphanesinin kendisinin lisanslama, dağıtım ve platform hususları olduğunda — sıklıkla tam giriş yüzeyini ele alacak tek bir kütüphaneyi tercih ederler.

Bağlama Karmaşıklığını Azaltma

Windows'ta başlayan projeler ve daha sonra Linux veya docker'a yayılmak, ZXing.Net'in bağlama parçalanmasını doğrudan karşılar: Windows bağlama paketi, çapraz platform ImageSharp bağlamasından farklı bir API kullanır ve arasında geçiş yapmak, hem NuGet referanslarında hem de görüntü yükleme kodunda değişiklik yapmayı gerektirir. Uygulamalarını konteynerleşmekte olan veya aynı kod tabanını geliştirici makinelerinde (Windows veya macOS) ve üretim sunucularında (Linux) çalıştıran ekipler, görüntü yükleme için iki ayrı kod yolu sürdürmenin, tarama katında yapılacak her değişikliğe bir sürtünme eklediğini fark eder.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

ZXing.Net'ten IronBarcode'a geçiş yapan ekipler, bu spesifik teknik değişikliklere planlanmalıdır.

Barkod Okuyucu Oluşturma Kaldırma

Kod tabanındaki her new BarcodeReader() çağrısı, geçiş sırasında kaldırılır. Oluşturma kalıbı — okuyucu oluşturma, format yapılandırma, görüntü yükleme, kod çözme çağrısı — tek bir statik yöntem çağrısına dönüşür. ZXing, ZXing.Common, ZXing.Windows.Compatibility, ZXing.ImageSharp ve SixLabors.ImageSharp isim alanlarını içe aktaran dosyalardan bu importlar kaldırılır ve tek bir using IronBarCode; ile değiştirilir.

Olası Formatlar Yapılandırması Kaldırma

reader.Options.PossibleFormats atama bloğu her çağrı noktasında silinir.IronBarcode otomatik biçim algılama yapar ve bir biçim kısıtlama listesi kabul etmez. TryHarder bayrağı, BarcodeReaderOptions üzerinde algılama çabasını daraltmadan kontrol eden ReadingSpeed özelliği ile değiştirilir.

Bağlama Paketi Temizliği

Geçiş, ZXing.Net, ZXing.Net.Bindings.Windows.Compatibility, herhangi bir ZXing.Net.Bindings.ImageSharp varyantının (.V2 / .V3) ve PDF okuma desteği eklemek için eklenen herhangi bir PdfiumViewer paketini kaldırır. Eğer libgdiplus, Linux'ta Windows bağlaması aracılığıyla System.Drawing desteklemek için bir Docker dosyasına eklenmişse, o satır da kaldırılır. IronBarcode, Docker görüntüsünde platforma özgü bağımlılık gerektirmez.

Ek IronBarcode Yetenekleri

Yukarıdaki karşılaştırma bölümlerinde ele alınan yetenekler dışında,IronBarcode sağlar:

  • Logo Gömülü QR Kodu: Ortasında özel logo resmi yerleştirilmiş QR kodları oluşturun, otomatik hata düzeltme ile taranabilirliği sağlamak.
  • QR Kod Renk Özelleştirmesi: Marka uyumlu çıktı için oluşturulan QR kodlarında ön plan ve arka plan renklerini ayarlayın.
  • Barkod Mühürleme PDF'ye: Ayrı bir PDF kütüphanesi olmadan, belirli koordinatlarda var olan PDF sayfalarına doğrudan barkod yazdırma.
  • GS1 Barkod Desteği: GS1-128 ve GS1 Veri Çubuğu dahil olmak üzere, perakende ve sağlık tedarik zincirlerinde kullanılan GS1 biçimli barkodları okuyun ve oluşturun.
  • Çok İş Parçacıklı Asenkron Okuma: Barkod okuma işlevini await hatlarına tıkanma olmadan entegre eden yerleşik asenkron yöntemler.
  • ML Destekli Görüntü Düzeltme: TryHarder'nin kurtaramadığı hasarlı, bulanık veya düşük kontrastlı barkodlar için otomatik görüntü iyileştirme.

.NET Uyumluluğu ve Geleceğe Hazırlık

IronBarcode, .NET Standard 2.0 ve üzerini hedefler, .NET Framework 4.6.2+, .NET Core 3.1, .NET 5, .NET 6, .NET 7, .NET 8 ve .NET 9 ile uyumluluk sunar. Kütüphane, Microsoft'un .NET sürüm döngüsü ile uyumlu düzenli güncellemeler alır ve .NET 10 ile uyumluluk, sürüme yakın bir tarihte veya sürümde mevcut olacaktır. ZXing.Net de geniş bir .NET uyumluluğu sürdürmek için NuGet paketi hedeflerini korur ve her iki kütüphane de bu yönden modern .NET projeleri için uygundur.

Sonuç

ZXing.Net ve IronBarcode, barkod kütüphane tasarımında farklı felsefeleri temsil eder. ZXing.Net, iş parçacığı sorumluluğunu, format spesifikasyonunu ve PDF bağlantısını tamamen arayana devreden durum bilgili, örnek tabanlı bir kütüphanedir. IronBarcode, iş parçacığını içselleştiren, formatları otomatik olarak algılayan ve PDF girişini yerel olarak işleyen durumsuz, statik-API kütüphanesidir. Bu farkın pratik sonucu, ZXing.Net kodunun eşzamanlı veya belge işleme bağlamlarında altyapı toplama eğilimindedir — iş parçacığı başına örnek modelleri, format listeleri, PDF işleme hatları ve platforma özgü bağlama dalları —IronBarcode kodu ise aynı senaryolar için bu çevresel yapıları gerektirmemektedir.

ZXing.Net, sıfır maliyetli gereksinimleri olan projeler için gerçekten güçlü bir seçimdir.Apache 2.0lisansı, açık kaynak projeleri ve ücretsiz bağımlılıkları tercih eden ticari ürünlerle uyumlu hale getirir. Kontrollü ortamlarda — tanınan barkod formatları, temiz görüntüler, tek iş parçacıklı veya hafif eşzamanlı işlem — güvenilir bir şekilde performans gösterir. Aktif GitHub topluluğu, sorunlara zamanında cevap verir ve format kapsamının genişliği ticari alternatiflerle karşılaştırılabilir. Bu koşulların geçerli olduğu uygulamalar için, ZXing.Net'in maliyet avantajı gerçektir ve teknik sınırlamaları yönetilebilir durumdadır.

IronBarcode, ZXing.Net'in tasarım kısıtlamalarının işletme maliyetlerine dönüştüğü senaryoları ele alır: istek başına örnek tahsisi ölçülebilen eşzamanlı web API'leri, PDF girdi normu olan belge işleme hatları, sessiz başarısızlıkların işletme riski taşıdığı karma biçimli taramalar ve iki bağlayıcı paket iki kod yolu anlamına geldiği çapraz platform dağıtımları. Bu bağlamlar için, kütüphanenin ticari lisansı örnek yönetimi dayatmayan bir iş parçacığı modeli, bakım gerektirmeyen format algılama ve ikinci kütüphane gerektirmeyen PDF desteği sağlar.

Karar, projenin gereksinimlerine bağlıdır. Tek biçimli bir prototip, açık kaynaklı bir tarayıcı veya maliyetin bağlayıcı bir sınırlama olduğu düşük hacimli bir araç — bunlar ZXing.Net'in uygun bir seçim olduğu durumlar. Harici kaynaklardan gelen belgeleri işleyen bir üretim web API'si — bu, IronBarcode'un tasarım varsayımlarının operasyonel gerçeklikle uyumlu olduğu yerdir. Kütüphanelerin algılama oranları ve gerçek dünya tarama senaryoları arasında nasıl karşılaştırıldığına dair daha geniş bir bakış için, ZXing.Net vs IronBarcode barkod tarayıcı karşılaştırması ek analiz sunar.

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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez