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
Barcodenesnesi oluşturmayı veEncode()çağrılmadan önce etiket ve yazı tipi özelliklerini yapılandırmayı gerektirir. SKImageDöndürür: Çıktı, bir dosya veya bayt dizisi üretmek için birSKEncodedImageFormatadı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.Typeenum, 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.Commonyerine 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
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:
BarcodeWriteroluşturmayı ele alır;BarcodeReaderokumayı 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(),MemoryStreamadımı olmadanbyte[]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
ReadingSpeedayarı: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
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
.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)
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)
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>
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)
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: Code128 → Code128, Ean13 → EAN13, UpcA → UPCA, Code39 → Code39. 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, veReadingSpeed.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, veAnyBitmapgiriş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.

