Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

BarcodeLib vs IronBarcode: C# Barkod Kütüphanesi Karşılaştırması

BarcodeLib vs IronBarcode: Açık Kaynak Üretici Nerede Duruyor

BarcodeLib, çoğu geliştiricinin sonunda yalnızca barkod oluşturabileceğini keşfettiği köklü bir açık kaynak .NET kütüphanesidir. Bir kısmı ayrıca SkiaSharp sürüm çatışmasını keşfeder — genellikle en kötü zamanda, zaten SkiaSharp'a dayanan bir MAUI veya Blazor projesine BarcodeLib'i eklediklerinde ve derleme NU1608 uyarıları atmaya başladığında. Bu makale her iki konuyu da ele alır.BarcodeLibbelirli bir kullanım durumuna sahip meşru bir kütüphanedir. Nerede durduğunu anlamak pratik sorudur.

BarcodeLib'i Anlamak

BarcodeLib, Brad Barnhill tarafından GitHub'da sürdürülen, .NET için açık kaynaklı bir barkod görüntü oluşturma kütüphanesidir. 2007'den beri faaldir ve yaklaşık 30 1D semboloji varyantını destekler. Apache 2.0 lisansı ticari kullanım için ücretsizdir. Yalnızca lineer barkod üretimi için — bir dizeden görsel oluşturma — güvenilir bir şekilde çalışır ve yıllarca süren aktif kullanım boyunca bu amaca iyi hizmet etmiştir.

API örnek tabanlıdır. Bir Barcode nesnesi oluşturur, özellikleri ayarlarsınız ve tür sabiti, veri dizisi ve piksel boyutları ile Encode() çağırırsınız. Sonuç, daha sonra ihtiyaç duyulduğunda kodlanan ve kaydedilen veya yayına alınan bir SKImage (SkiaSharp) olur. Bu iş akışı yaklaşılabilir ve gereksinimin yalnızca lineer barkod görüntüleri yazdırmak olduğu projelerde — nakliye etiketleri, envanter etiketleri, perakende fiyat etiketleri — yeterlidir.

BarcodeLib'in ana mimari özellikleri:

  • Yalnızca oluşturma kapsamı: Kütüphanenin herhangi bir okuma veya kod çözme API'si yoktur; bütün halka açık yüzey alanı, veri dizelerinden görüntüler üretmeye yöneliktir
  • Örnek tabanlı API: Her işlem, bir Barcode nesnesi oluşturmayı ve Encode() çağrılmadan önce etiket ve yazı tipi özelliklerini yapılandırmayı gerektirir.
  • SKImage Döndürür: Çıktı, bir dosya veya bayt dizisi üretmek için bir SKEncodedImageFormat adımı ve bir akış gerektiren bir SkiaSharp görüntü nesnesidir.
  • Sadece 1D sembolojiler: Code128, EAN-13, UPC-A ve Code39 dahil yaklaşık 30 lineer formatı destekler; Mevcut 3.x kaynağındaki BarcodeStandard.Type enum, QR Code, Data Matrix, PDF417, Aztec veya diğer 2D girişleri içermez.
  • SkiaSharp bağımlılığı (v3.x): 3.x serisi, çapraz platform desteği sağlamak için System.Drawing.Common yerine SkiaSharp ile değiştirilmiştir; bu, projede başka paketler de SkiaSharp'a bağımlı olduğunda sürüm çatışması riskini tanıtır
  • Ücretsiz, lisans anahtarı gereklidir: Apache 2.0 lisansı, çalıştırma anahtarı veya aktivasyon olmadan ticari kullanımı kapsar;

BarcodeLib Çekirdek Oluşturma Deseni

StandartBarcodeLiboluşturma iş akışı, bir örnek oluşturmayı, özellikleri yapılandırmayı ve Encode()'a boyutlarla çağırmayı gerektirir:

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
Imports BarcodeStandard
Imports SkiaSharp

Dim b As New Barcode()
b.IncludeLabel = True
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)

Using stream = File.OpenWrite("barcode.png")
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
$vbLabelText   $csharpLabel

Bu, tam oluşturma iş akışıdır. Özellik setter modeli tasarımdır: yapılandırma, Encode() çağrısından önce örnek üzerinde gerçekleşir ve dönen değer, kodlanması ve bir akışa yazılması gereken bir SKImage'dir.

IronBarcode Anlama

IronBarcode bir ticari .NET barkod kütüphanesidir ve hem oluşturma hem de okuma tek bir pakette kapsanır. NuGet aracılığıyla yüklenir, .NET Framework 4.6.2'den .NET 9'a kadar çalıştırılır ve Windows, Linux, macOS, Docker, Azure ve AWS Lambda üzerinde çalışır. Kütüphane, Iron Software tarafından geliştirilir ve ticari bir destek modeliyle sürdürülür.

Oluşturma API'si statik ve akıcıdır — örnek oluşturmaya gerek yoktur, ana çağrıyı yapmadan önce herhangi bir özellik ayarlamak zorunlu değildir. Yapılandırma seçenekleri BarcodeWriter.CreateBarcode() veya QRCodeWriter.CreateQrCode() sonucuna zincirlenir. -MemoryStream modelini ortadan kaldıran zincirin sonundaki çıktı metodları — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() —BarcodeLibgerektirir. Okuma, ayrı bir kütüphane veya ZXing.Net entegrasyonunu sürdürmeye gerek olmadan aynı paketin bir parçasıdır.

IronBarcode'un ana özellikleri:

  • Tek bir paket içinde oluşturma ve okuma: BarcodeWriter oluşturmayı ele alır; BarcodeReader okumayı ele alır; her ikisi de aynı NuGet yüklemesiyle gelir
  • Statik akıcı API: Örneklemeye gerek yoktur; CreateBarcode() sonrasında akıcı yöntemler kullanarak yapılandırma zincirleri
  • Doğrudan bayt dizisi çıkışı: .ToPngBinaryData(), MemoryStream adımı olmadan byte[] döndürür
  • PDF desteği her iki uçta da: BarcodeReader.Read(), PDF dosyalarını doğrudan kabul eder; oluşturma çıktısı PDF'lerde gömülebilir
  • SkiaSharp bağımlılığı yok: MAUI ve diğer projelerde NU1608 çakışmalarını ortadan kaldırarak SkiaSharp versiyon grafiğinden bağımsızdır
  • SLA ile ticari lisans: $749–$5,999 süresiz fiyatlandırılır; ticari desteği ve garanti edilmiş güncelleme sıklığını içerir
  • ReadingSpeed ayarı: BarcodeReaderOptions, hacimdeki performans için tarama inceliği ticareti yapılmasına izin verir

Özellik Karşılaştırması

Özellik BarcodeLib IronBarcode
Barkod oluşturma Evet (sadece 1D) Evet (1D ve 2D)
Barkod okuma Hayır Evet
2D symbologies (QR, Data Matrix, PDF417, Aztec) Hayır Evet
PDF barkod okuma Hayır Evet
Grafikte SkiaSharp bağımlılığı Evet (v3.x) Hayır
Akışkan zincirlenebilir API Hayır Evet
Lisans Apache 2.0 (ücretsiz) $749–$5,999 süresiz

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

Özellik BarcodeLib IronBarcode
Üretim
Code128 oluşturma Evet Evet
EAN-13 / UPC-A oluşturma Evet Evet
QR Kod oluşturma Hayır Evet (logo gömme ile)
Data Matrix / PDF417 / Aztek Hayır Evet
1D semboloji kapsamı ~30 çeşit 30+ çeşit
Akıcı zincirlenebilir oluşturma API'si Hayır Evet
Doğrudan byte[] çıkışı Manuel (akış kodla) .ToPngBinaryData()
PDF oluşturma çıktısı Hayır Evet
Okuma
Görüntüden barkod okuma Hayır Evet (BarcodeReader.Read())
PDF'den barkod okuma Hayır Evet (yerel, ek kütüphane yok)
Çoklu barkod algılama Hayır Evet (ExpectMultipleBarcodes)
Okuma hızı ayarlaması Yok Evet (ReadingSpeed enum)
Platform
Windows Evet Evet
Linux / macOS Kısmi (SkiaSharp bağımlı) Tam
Docker / kapsayıcı Yapılandırma gerekli Evet
MAUI proje uyumluluğu Çakışma riski (NU1608) Çakışma yok
.NET Framework 4.6.2+ Evet Evet
.NET 6–9 Evet (SkiaSharp 3.x gerekli) Evet
Lisanslama
Açık kaynak / ücretsiz Evet (Apache 2.0) Hayır
Ticari destek / SLA Hayır Evet
Lisans anahtarı gerekli Hayır Evet
Fiyatlandırma Ücretsiz $749–$5,999 süresiz

Barkod Oluşturma API'si

Oluşturma API'leri farklı tasarım felsefelerini temsil eder: BarcodeLib, değişken örnek yapılandırması kullanırken,IronBarcode statik bir giriş noktası üzerinde akıcı bir zincir kullanır.

BarcodeLib Yaklaşımı

BarcodeLib'de, Encode()'a boyutlarla çağrılmadan önce bir örnek oluşturmak ve özellikleri ayarlamak gereklidir. Çıktı bir SKImage'dir:

using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
Imports BarcodeStandard
Imports SkiaSharp

Public Function GenerateCode128(data As String) As Byte()
    Dim b As New Barcode()
    b.IncludeLabel = True
    Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100)

    Using ms As New MemoryStream()
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

SKImage dönüş türü, bayt dizisi çıktısının bir SKEncodedImageFormat kodlama çağrısı ve bir MemoryStream gerektirdiği anlamına gelir. IncludeLabel özelliği bir boolean anahtarıdır — BarcodeLib, kodlanmış veri dizesini çubukların altında görünen etiket olarak render eder.

IronBarcode Yaklaşımı

IronBarcode'un oluşturması tamamen statik bir yapıya sahiptir. CreateBarcode() sonrasında yapılandırma zincirleri, ve çıktı metodları zinciri doğrudan sonlandırır:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
Imports IronBarCode

Public Function GenerateCode128(data As String) As Byte()
    Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .ResizeTo(300, 100) _
        .AddBarcodeValueTextBelowBarcode() _
        .ToPngBinaryData()
End Function
$vbLabelText   $csharpLabel

.ToPngBinaryData() bayt dizisini doğrudan döndürür — ara Image veya MemoryStream nesnesi yok. .AddBarcodeValueTextBelowBarcode(), kodlanmış veri dizesini çubukların altındaki etiket olarak render eder. İleri seviye oluşturma senaryoları için, IronBarcode barkod oluşturma belgelendirmesi 'ne bakın.

Barkod Okuma Yeteneği

Okuma, bu iki kütüphane arasında en önemli işlevsel sınırı temsil eder. BarcodeLib'in okuma yeteneği yoktur; IronBarcode, aynı pakette tam bir okuma motoru içerir.

BarcodeLib Yaklaşımı

BarcodeLib'in okuma API'si yoktur. Decode(), Scan(), veya ReadBarcode() yöntemi yoktur. Okuma, kütüphanenin tasarımının hiçbir zaman bir parçası olmamıştır. Bir kod çözme metodunu çağırmaya yönelik herhangi bir deneme derleme hatasıyla sonuçlanır:

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
Imports BarcodeStandard
Imports SkiaSharp

Dim b = New Barcode()

' There is no Decode, Scan, or Read method on Barcode.
' b.Decode("barcode.png")      ' does not exist
' b.Scan("barcode.png")        ' does not exist
' b.ReadBarcode("barcode.png") ' does not exist

' The only public operation is generation:
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)
$vbLabelText   $csharpLabel

BarcodeLib ile birlikte okunmayı ve oluşturmayı gerektiren ekipler, genellikle ZXing.Net gibi ikinci bir kütüphane eklemeli, bu da kendi bağımlılık yönetimini ve bakımı açısından ikinci bir API yüzeyi oluşturur.

IronBarcode Yaklaşımı

BarcodeReader.Read(), görüntü dosyalarını, PDF dosyalarını, akışları ve System.Drawing.Bitmap nesnelerini kabul eder. PDF'den okuma için ek bir kütüphane gerekmez:

using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode

' Read from an image
Dim results = BarcodeReader.Read("barcode.png")
Console.WriteLine(results.First().Value)  ' "PRODUCT-12345"

' Read all barcodes from a PDF — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next

' Tune reading for speed vs. thoroughness
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-scan.png", options)
$vbLabelText   $csharpLabel

ReadingSpeed enum, yüksek hacimli senaryolar için tarama performansını ayarlamaya izin verir. Okuma yapılandırması rehberi için, IronBarcode okuma belgelendirmesi 'ne bakın.

SkiaSharp Bağımlılık Çatışması

BarcodeLib 3.x'te tanıtılan SkiaSharp bağımlılığı, IronBarcode'da var olmayan bir çatışma sınıfı oluşturur.

BarcodeLib Yaklaşımı

BarcodeLib 3.x ile başlayan kütüphane, .NET 6 sonrasında Windows'a özel hale gelen System.Drawing.Common'yi değiştirmek için bir grafik arka uç olarak SkiaSharp'ı tanıttı.BarcodeLib3.1.5 SkiaSharp >= 2.88.8 ilan eder. Bir proje başka bir bağımlılık yoluyla SkiaSharp kullandıysa — özellikle SkiaSharp.Views.Maui ve Microsoft.Maui.Graphics kullanan MAUI projelerinde yaygın — çözülen sürümler örtüşmeyebilir. Sonuç, en azından bir NU1608 uyarısı ve en kötü durumda çalışma zamanında bir montaj bağlama hatasıdır:

warning NU1608: Detected package version outside of dependency constraint:
BarcodeLib 3.1.5 requires SkiaSharp (>= 2.88.8) but
version SkiaSharp 3.116.1 was resolved.

Çözümün zorlanması, açık paket referansları ile bir yol olsa da, çalışma zamanı uyumluluğunu garanti etmez:

<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

Açık geçersiz kılmalar olsa bile, uyumluluk, BarcodeLib'in iç API çağrılarının, çözülen SkiaSharp sürümünün sağladıklarıyla eşleşmesine bağlıdır. Topluluk tarafından sürdürülen bir proje olarak, BarcodeLib'in yayın döngüsüne bağlı hiçbir ticari destek sözleşmesi yoktur.

IronBarcode Yaklaşımı

IronBarcode, uygulama koduyla SkiaSharp bağımlılık grafiğini paylaşmaz. Yönetilecek bir sürüm pazarlığı yoktur, çözülecek bir NU1608 veya SkiaSharp sürüm çözümüyle bağlı çalışma zamanı montaj bağlama riski yoktur. MAUI projeleri, Blazor projeleri ve SkiaSharp'a bağımlı diğer uygulamalar, herhangi bir sürüm çatışması olmadan IronBarcode'u kurabilirler. MAUI özel entegrasyon kalıpları için, IronBarcode MAUI belgelendirmesine bakın.

API Eşleme Başvurusu

BarcodeLib IronBarcode
new Barcode() Statik API - örnek gerekmez
b.Encode(BarcodeStandard.Type.Code128, "data", 300, 100) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).ResizeTo(300, 100)
b.IncludeLabel = true .AddBarcodeValueTextBelowBarcode()
SKImage Döndürür .SaveAsPng(path) / .ToPngBinaryData()
BarcodeStandard.Type.Code128 BarcodeEncoding.Code128
BarcodeStandard.Type.Code39 BarcodeEncoding.Code39
BarcodeStandard.Type.Ean13 BarcodeEncoding.EAN13
BarcodeStandard.Type.UpcA BarcodeEncoding.UPCA
Desteklenmiyor (BarcodeLib'te 2D yok) BarcodeEncoding.QRCode (ayrıca QRCodeWriter)
Okuma API'si yok BarcodeReader.Read(path)
Bağımlılık grafiğinde SkiaSharp SkiaSharp bağımlılığı yok

Ekipler BarcodeLib'den IronBarcode'a Geçmeyi Düşündüğünde

Okuma Gereksinimi Ortaya Çıkar

Aylarca gönderi etiketleri üreten bir sistem yeni bir gereksinim alır: uygulama ayrıca tedarikçilerden iade edilen etiketleri de işleyecektir. Depo entegrasyonu gelen gönderi manifestosundaki barkodları okumalıdır. Bir belge yönetim sistemi, taranmış PDF'lerdeki barkodları indekslemelidir.BarcodeLibbu gereksinimlerin hiçbirini karşılayamaz — okuma API'si yoktur. Ekip,BarcodeLibile birlikte ZXing.Net eklemeyi değerlendirir, çift kütüphane bakım yükünü ve iki ayrı bağımlılık grafiğini tartar ve daha temiz yolun hem oluşturma hem de okuma işlemlerini tek bir NuGet yüklemesinde ele alan bir kütüphane olduğunu belirler.

MAUI Projesinde SkiaSharp Çatışması

Bir ekip, mevcut bir MAUI uygulamasınaBarcodeLibekler ve hemen geri yükleme sırasında NU1608 uyarılarıyla karşılaşır. Version mismatch sorunlarını çözmek için, BarcodeLib'in beklenen SkiaSharp aralığı ile MAUI'nin gerektirdiği versiyon arasındaki farkı tespit edip inceleme yaparak, çözümü zorlamak için explicit <PackageReference> geçersiz kılmaları ekler ve yapıyı geçirirler. Daha sonra cihaz üzerinde, SkiaSharp'ın yerel ikilityelerini yanlış sürüm yüklediğinde bir çalışma zamanı çökmesiyle karşılaşırlar. Düzeltme, montaj bağlama günlüğünde daha derin bir araştırma gerektirir. IronBarcode'a geçmek, çatışmayı kökten kaldırır — uyumlu bir SkiaSharp sürümü bulmak yerine, paylaşılan bağımlılığı tamamen ortadan kaldırarak.

PDF Barkod İşleme Gereklidir

Yerleşik barkodlarla PDF belgeleri üreten uygulamalar — faturalar, iş emirleri, gönderi listeleri — bazen bu barkodları aşağı yönde işleme sırasında tekrar okumak zorunda kalır.BarcodeLibbarkod görüntüleri oluşturur ancak her iki taraf için PDF desteği yoktur. PDF'denBarcodeLibile barkod okumak, önce PDF'yi bir ayrı PDF kütüphanesi kullanarak görüntülere dönüştürmeyi, ardından bu görüntüleri ayrı bir okuma kütüphanesine aktarmayı gerektirir.IronBarcode tüm zinciri yerel olarak ele alır: BarcodeReader.Read("file.pdf") her sayfayı geçer ve herhangi bir ara render adımı olmadan tespit edilen tüm barkodları döndürür.

QR Kod veya Diğer 2D Sembol İhtiyacı Görünür

Başlangıçta yalnızca doğrusal barkod gerektiren projeler genellikle QR Kod, Data Matrix, PDF417 veya Aztec çıktısına ihtiyaç duyacak şekilde evrilir. BarcodeLib, 3.x serisinde herhangi bir 2D semboloji üretmez — BarcodeStandard.Type enum, QR Code veya diğer 2D girişler içermez — bu nedenle herhangi bir 2D gerekliliği, ikinci bir kütüphaneyi eklemek veya BarcodeLib'i tamamen değiştirmek anlamına gelir. IronBarcode'un QRCodeWriter ve BarcodeWriter, aynı akıcı API üzerinden QR Code (logo yerleştirme, renk kontrolü ve hata düzeltme ayarı ile), Data Matrix, PDF417 ve Aztec'i kapsar. Semboloji gereksinimleri 2D'ye doğru ilerleyen ekipler, bu açığın taşıma kararı üzerinde etkili olduğunu bulur.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

Örnek API'den Statik Akıcı API'ye

BarcodeLib kodları bir değiştirilebilir nesne modeli kullanır: bir Barcode örneği oluşturur, özellikleri ayarlar, Encode() çağrısı yaparsınız.IronBarcode sabit bir akıcı model kullanır: BarcodeWriter.CreateBarcode() çağrısını yapın, yapılandırma metodlarını zincirleyin, bir çıktı metodu ile sonlandırın. Bir Barcode örneğini bir alan olarak saklayan veya metodlar arasında geçiren mevcut kodun yeniden yapılandırılması gerekecek. Tipik değişiklik, özellik ayarlama bloğunu bir yöntem zinciriyle değiştirmektir:

// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
' The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .AddBarcodeValueTextBelowBarcode() _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

SKImage'ten Doğrudan Çıkış

BarcodeLib 3.x döner SKImage, bu da bayt üretmek için bir SKEncodedImageFormat ve bir akış gerektirir. SKImage üzerine yazılmış veya image.Encode(...).SaveTo(stream) içinden geçen herhangi bir kodun güncellenmesi gerekecektir. IronBarcode'un akıcı zinciri, arzu edilen çıktı formatı ile doğrudan sonlanır — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() — ara görsel nesneyi ve akışa kodlama adımına ihtiyacı ortadan kaldırarak.

Tür Enum'undan BarcodeEncoding Enum'una

BarcodeLib 3.x, PascalCase değerleriyle BarcodeStandard.Type enumunu kullanır, örneğin BarcodeStandard.Type.Code128. IronBarcode, BarcodeEncoding enumunu BarcodeEncoding.Code128 gibi değerlerle kullanır. 1D değerler doğrudan eşleşir: Code128Code128, Ean13EAN13, UpcAUPCA, Code39Code39. BarcodeStandard.Type. için .cs dosyaları arasında grep, güncellenmesi gereken tüm olayları belirler.

SkiaSharp Referansı Temizleme

BarcodeLib'in NU1608 uyarılarını çözmek için yalnızca explicit <PackageReference Include="SkiaSharp"> girişleri ekleyen projeler, IronBarcode'a geçtikten sonra bu geçersiz kılmaları kaldırabilirler. dotnet list package --include-transitive komutu, SkiaSharp'ın projedeki diğer paketler tarafından hala gerekip gerekmediğini kontrol eder.

Ek IronBarcode Yetenekleri

Doğrudan oluşturma ve okuma karşılaştırmasının ötesinde, IronBarcode, BarcodeLib'in ele almadığı yetenekleri içerir:

  • QR kodu logo gömme: QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png"), bir QR kodunun merkezine bir marka logosu yerleştirir ve otomatik hata düzeltme ayarı yapar
  • PDF barkod çıkarımı: BarcodeReader.Read("file.pdf"), ayrı bir PDF render kütüphanesine gerek kalmadan bir PDF belgesinin her sayfasındaki barkodları okur
  • Çoklu barkod algılama: BarcodeReaderOptions.ExpectMultipleBarcodes = true, tek bir görüntüde mevcut olan tüm barkodları tespit eder ve döndürür
  • Okuma hızı yapılandırması: ReadingSpeed.Faster, ReadingSpeed.Balanced, ve ReadingSpeed.ExtremeDetail, tarama motorunu geçiş verimliliği ile doğruluk arasında ayarlar
  • Stilize QR kodu oluşturma: Renk, bulucu model tarzı ve hata düzeltme seviyesi, zincirli metodlar aracılığıyla QRCodeWriter üzerinde yapılandırılabilir
  • Okuma için Akış ve Bitmap girişi: BarcodeReader.Read(), dosya yollarını, akışları, System.Drawing.Bitmap, ve AnyBitmap girişlerini kabul eder

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

IronBarcode, .NET 4.6.2'den .NET 9'a kadar destekler ve Microsoft'un .NET sürüm takvimine uyumlu düzenli sürüm frekansı sürdürür. .NET 10 kullanımı 2026 yılı boyunca arttıkça, IronBarcode'un aktif geliştirmesi, proje değişikliği gerektirmeksizin ileriye dönük uyumluluk sağlar. Kütüphane, Windows, Linux, macOS, Docker, Azure ve AWS Lambda üzerinde değişiklik gerektirmeden çalışır.BarcodeLibayrıca aktif bir topluluk geliştirmesini sürdürür, ancak 3.x serisinde platformlar arası desteği, yukarıdaki karşılaştırma bölümlerinde tartışılan SkiaSharp sürüm uyumluluğuna bağlıdır. Linux veya kapsayıcılarda modern .NET'i hedefleyen projeler için, IronBarcode'un bağımsız çapraz platform mimarisi, BarcodeLib'in SkiaSharp arka ucunun tanıttığı sürüm pazarlığını ortadan kaldırır.

Sonuç

BarcodeLib ve IronBarcode, .NET'teki barkod çalışması için farklı çözüm kapsamlarını temsil eder. BarcodeLib, tanımlanmış kullanım durumuna güvenilir bir şekilde hizmet eden odaklanmış, ücretsiz, yalnızca oluşturma kütüphanesidir ve neredeyse yirmi yıldır işler. IronBarcode, oluşturma ve okuma her ikisini de kapsayan, statik akıcı API'ye ve SkiaSharp bağımlılığına sahip olmayan bir ticari kütüphanedir. Fark, paylaşılan kapsam içinde kalite farkı değildir — kapsamın kendisinde bir farktır.

BarcodeLib, Windows'da veya SkiaSharp sürüm manzarasının kontrol edildiği ortamlarda, istikrarlı, yalnızca doğrusal üretim gereksinimleri olan projeler için uygun bir seçim olmaya devam eder. Apache 2.0 lisansı, sıfır maliyeti ve basit API'si, hiçbir zaman barkod taraması yapması veya 2D sembolojiler üretmesi gerekmeyecek olan kargo etiketi sistemleri, envanter etiket üreticileri ve benzer uygulamalar için pratik bir çözüm sunar.

Gereksinimler doğrusal görüntü üretiminin ötesine taşındığında IronBarcode daha pratik bir seçim haline gelir: Okuma yeteneği gerektiğinde, proje bir MAUI veya SkiaSharp sürüm uyumsuzluklarının olası olduğu bir çapraz platform uygulaması olduğunda, PDF barkod işleme yol haritasında yer aldığında veya herhangi bir 2D semvol aklam (QR Kodu, Veri Matrisi, PDF417, Aztec) gerektiğinde. Ticari lisans maliyeti, eşik sorusunu temsil eder - gereksinimlerin IronBarcode'un BarcodeLib'e eklediği şeylerle örtüştüğü ekipler için tek paket çözümü ve ticari destek, değer değişimini oluşturur.

Dürüst değerlendirme, çoğu ekibin başlangıçta IronBarcode ile başlamadığı üzerinedir. Ücretsiz olduğu ve yeterli olduğu içinBarcodeLibile başlarlar. Gereksinimleri BarcodeLib'in yalnızca oluşturma kapsamının ötesine geçtiğinde IronBarcode'a geçiyorlar. Geçiş iyi belgelenmiş ve API yüzeyindeki değişiklikler öngörülebilir. BarcodeLib'in durduğu yeri anlamak — ve özellikle oluşturma aşamasında durduğu gerçeği —, bu zamanlama kararını doğru yapmak için gereken pratik bilgidir.

Sıkça Sorulan Sorular

BarcodeLib nedir?

BarcodeLib, 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.

BarcodeLib ile IronBarcode arasındaki temel farklar nelerdir?

IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, BarcodeLib 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, BarcodeLib'e 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, BarcodeLib'in 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, BarcodeLib'e 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, BarcodeLib'in 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.

BarcodeLib 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.

BarcodeLib'ten IronBarcode'a geçiş yapmak kolay mı?

BarcodeLib'ten 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.

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