如何使用 C# 從圖片讀取 BarCode
IronBarcode 透過 BarcodeReader.Read(),僅需一行 C# 程式碼即可從圖片中讀取 BARCODE,支援多種圖片格式,包括 PNG、JPEG、GIF、BMP、TIFF 和 SVG,並提供可自訂的選項以提升效能與準確度。
IronBarcode 的關鍵功能之一,在於其開箱即用的能力,可讀取多種圖像格式的 BarCode。 IronBarcode 目前支援以下圖像格式:
- 可縮放向量圖形 (SVG)
- 聯合影像專家組 (JPEG)
- 可攜式網路圖形 (PNG)
- 圖形交換格式 (GIF)
- 標記圖像檔案格式 (TIFF)
- 位圖影像檔案 (BMP)
This is made possible with the help of our open source library, IronDrawing. 如需查看完整支援的BarCode格式清單(包含一維與二維條碼類型),請參閱我們的完整文件。
快速入門:數秒內從圖片讀取BarCode
只需簡單呼叫 IronBarCode.BarcodeReader.Read(),即可直接從 PNG、JPEG、GIF、BMP 和 TIFF 等圖像檔案格式中擷取 BARCODE 資料。 立即開始使用——無需複雜設定,即刻見效。
簡化工作流程(5 個步驟)
- 下載 C# 函式庫以從圖片中讀取 BARCODE
- 使用
Read方法從各種圖像格式中讀取 BarCode 值 - 使用 BarcodeReaderOptions 類別來設定讀取設定
- 使用 CropArea 屬性指定圖片中的 BarCode 區域
- 透過設定 ExpectBarCodeTypes 屬性來指定要讀取的 BarCode 類型
如何直接從圖片讀取BarCode?
以下是使用 IronBarcode 進行 BARCODE 讀取的方法。 如需關於在 C# / .NET 中讀取 BARCODE 的完整教學,包括 PDF 處理與批次操作的高階技術,請參閱我們的詳細指南:
:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;
var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path
foreach (var item in myBarcode)
{
Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System
Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path
For Each item In myBarcode
Console.WriteLine(item.ToString())
Next item
想知道範例中的BARCODE值是什麼嗎?試試這個程式碼片段吧!
要使用 IronBarcode,首先必須透過 Microsoft Visual Studio NuGet 套件管理員將 IronBarcode程式庫安裝至您的專案中,如下圖所示。 這將讓您能夠使用 IronBarcode 的 BarcodeReader.Read() 方法,直接讀取 BARCODE 影像。
IronBarcode 提供簡便的操作方式,使用者只需使用 BarcodeReader.Read() 即可讀取已包含在專案中的影像檔案,方法參數可指定檔案名稱字串或檔案路徑字串。 最佳實務是在方法中指定檔案路徑時,使用字面字串常量"@",以避免在檔案路徑字串中添加多個轉義字元"\"。
請在 BarcodeReader.Read() 方法呼叫的結尾附加 Values() 方法,以將 BARCODE 值取得為 System.String[] 物件。
若要將結果輸出至控制台,您可以使用 foreach 迴圈來遍歷 string[] 陣列中儲存的值,並在迴圈區塊內,將迭代變數作為參數傳入 Console.WriteLine() 方法。
IronBarcode 能夠讀取一維條碼格式 (Codabar, Code128, Code39, Code93, EAN13, UPCE) 以及各種圖像格式的二維BARCODE格式 (Aztec, DataMatrix, QRCode)。
如何設定BarCode讀取器的選項以獲得更佳效能?
覺得BarCode讀取速度太慢嗎? 圖片中的 BarCode 是否過小,導致 IronBarcode 無法讀取? 只想讀取圖片中的特定區域嗎? 想從混雜多種BarCode的圖片中,僅讀取特定類型的BarCode嗎? 想提升整體閱讀表現嗎?
BarcodeReaderOptions 允許使用者微調或調整 BARCODE 讀取器的行為,以解決所有這些問題。 有關設定BarCode讀取器選項的詳細範例,請參閱我們的完整指南。以下各節將逐一說明 BarcodeReaderOptions 中所有可調整的屬性。
如何指定要讀取圖片的哪個區域?
CropArea 是 IronSoftware.Drawing.CropRectangle 類型且存在於 BarcodeReaderOptions 中的屬性,可讓使用者指定 IronBarcode 應讀取的影像區域。 這有助於提升讀取效能,因為BarCode讀取器無需掃描整張圖片來尋找BarCode;同時也提高了讀取準確性,因為讀取範圍已明確指定。 進一步了解如何指定裁切區域以獲得最佳效能。
要設定 CropArea 屬性,只需建立一個新的 Rectangle 類型物件,並將矩形的座標、寬度和長度作為參數指定即可。 接受的測量單位為像素 (px)。
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
CropArea = cropArea
};
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
CropArea = cropArea
};
Imports IronSoftware.Drawing
' Example of setting CropArea
Dim cropArea As New Rectangle(x:=100, y:=100, width:=300, height:=300)
Dim options As New BarcodeReaderOptions() With {
.CropArea = cropArea
}
為了加快讀取速度,我應該指定哪些BarCode類型?
預設情況下,IronBarcode 支援的所有 BARCODE 都將以影像形式進行掃描。 然而,若使用者已知圖片中包含哪些類型的BARCODE,或希望僅讀取特定類型的BARCODE,將此屬性設定為僅讀取特定類型的BARCODE,將能大幅提升讀取效能與準確性,因為BARCODE讀取器無需遍歷整組BARCODE集合來解析與讀取BARCODE。
若要使用此屬性,只需將 ExpectBarcodeTypes 設定為 BarcodeEncoding 枚舉中的其中一個欄位即可。 以下是 IronBarcode 支援的所有 BarCode 類型的範例。
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
' Example: Expect only QR codes and Code128
Dim options As New BarcodeReaderOptions() With {
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}
何時應停用多重BarCode讀取功能?
IronBarcode 預設會掃描影像中所有可用的 BARCODE,這包含掃描整個影像檔案,並將讀取到的 BARCODE 值加入字串陣列中。 然而,若使用者不希望讀取影像檔案中的多個 BARCODE,可將此屬性設為 false,如此一來,BARCODE 讀取器在找到一個 BARCODE 值後便會停止掃描。 這將進一步提升 IronBarcode 的效能與讀取速度。 如需有關讀取多個BarCode的更多資訊,請參閱我們的專用指南。
影像濾鏡如何提升BarCode辨識效果?
可在 BarcodeReaderOptions 中新增的屬性之一,是一組影像濾鏡。 影像濾鏡對於預處理傳入 IronBarcode 的原始影像至關重要。 若要在 BarcodeReaderOptions 內套用影像濾鏡,使用者必須先初始化並指定要使用的 ImageFilter 集合。 如需有關影像修正技術(包括濾鏡應用)的完整指南,請參閱我們的教學文章。
如何優化多執行緒以提升效能?
IronBarcode 允許使用者啟用並調整並行執行緒的數量,進而提升處理流程的速度與效率。 並行執行意指在不同的處理器核心上同時執行多個執行緒。 IronBarcode 中 MaxParallelThread 屬性的預設值為 4。使用者可根據其電腦的效能與資源量進行調整。
我應該啟用多執行緒處理嗎?
此屬性可讓 IronBarcode 並行讀取多張圖像。 #Multithreaded 的預設值為 true,因此系統將自動管理多個執行緒,以提升批次 BarCode 讀取任務的效能。
為什麼我應該移除誤判讀數?
此功能可消除任何錯誤識別的BarCode讀取結果。 BARCODE誤判(False-positive)僅指BARCODE值被錯誤讀取,卻被判定為有效。 這可能是由於排序過程中的錯誤,或是BarCode標籤或準備過程中的錯誤所導致。 因此,將 RemoveFalsePositive 設為 true 將移除錯誤識別的 BARCODE 讀取結果,從而提升 BARCODE 讀取的準確性。 然而,若使用者願意犧牲準確性以換取效能,將此屬性設定為 false 將有所助益。此屬性的預設值為 true。
MinScanLines 如何影響偵測準確度?
MinScanLines 設定了 BarCode 結果被視為有效的最低掃描線數門檻。 預設值為 2。增加此數值可減少誤判,但可能會導致無法偵測到較細或品質較差的 BARCODE。 將數值調低至 1 可提高對難以辨識 BarCode 的敏感度,但可能導致雜訊增加。
針對不同的使用情境,有哪些可用的掃描模式?
說明 IronBarcode 如何掃描並偵測影像中的 BarCode。
Auto:透過自動影像預處理及最佳化的讀取器設定,讀取BARCODE。 建議採用此設定以獲得最佳效果與效能。OnlyDetectionModel:掃描圖像中的 BARCODE,並將其位置以IronSoftware.Drawing.PointF陣列的形式返回。 此模式不會讀取偵測到的BARCODE; 它僅會返回每個BarCode的位置。MachineLearningScan:利用機器學習偵測技術掃描圖像中的BarCode並進行讀取。OnlyBasicScan:無需機器學習偵測、自動影像預處理或讀取器選項設定,即可讀取BARCODE。 此選項可與IronBarCode.Slim單獨使用。
閱讀速度設定如何影響準確度?
顧名思義,Speed 屬性可讓使用者進一步優化 IronBarcode 讀取器的效能。 與 RemoveFalsePositive 屬性類似,調整此屬性可提升效能,但會犧牲部分精確度。 如需深入了解讀取速度選項(包括效能基準測試),請參閱我們的詳細指南。它支援 ReadingSpeed 枚舉,該枚舉包含以下 4 個等級:
Faster:可實現最快的BARCODE讀取速度,但會降低準確度。 此流程省略了影像預處理步驟,往往導致BarCode辨識結果為空。 僅當輸入圖片清晰銳利時,才使用此設定。Balanced:建議將此設定用於Speed屬性。 它透過對圖像進行輕度處理,以釐清BarCode區域並使其更為醒目,讓BarCode讀取器能順利偵測,從而達成準確性與可讀性之間的平衡。 大多數情況下,此設定已足以讓 IronBarcode 讀取 BARCODE 影像並產生精確的輸出結果。Detailed:若使用ReadingSpeed.Balanced設定無法成功從讀取結果產生 BARCODE 值,使用者可選擇使用ReadingSpeed.Detailed。 IronBarcode 將對圖像進行中等程度的處理,以進一步清晰化 BarCode 區域,使 BarCode 讀取器能更明確地偵測 BarCode。 此設定對於偵測尺寸較小或清晰度較低的BarCode影像非常有用。ExtremeDetail:由於此設定會造成 CPU 負載過高,因此最不建議使用。 系統將對BARCODE影像進行深度處理,以便讀取器能讀取BARCODE。 建議使用者在選擇此設定前,先對圖片進行預處理或套用濾鏡。
何時應使用 Code39 擴展模式?
此設定允許透過擴展模式讀取並解讀 Code39 類型 BARCODE,此時將套用完整的 ASCII 字元集。 將 UseCode39ExtendedMode 設定為 true,將能更精確地讀取 Code39 BARCODE。
如何透過自訂選項實作進階BarCode讀取功能?
既然我們已經了解所有可供使用者調整的選項(無論是為了提升效能還是精準度),以下將說明如何在程式碼中應用這些設定。 以下程式碼片段展示了 BarcodeReaderOptions 的完整用法:
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;
// Create custom reader options
var options = new BarcodeReaderOptions()
{
// Specify expected barcode types for better performance
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,
// Define specific area to scan (x, y, width, height in pixels)
CropArea = new Rectangle(100, 100, 500, 400),
// Set reading speed to balance accuracy and performance
Speed = ReadingSpeed.Balanced,
// Enable multithreading for better performance
Multithreaded = true,
MaxParallelThreads = 4,
// Remove false positives for accuracy
RemoveFalsePositive = true,
// Minimum scan lines that must agree for a valid result (default 2)
MinScanLines = 1,
// Enable Code39 extended mode if needed
UseCode39ExtendedMode = true,
// Set scan mode
ScanMode = BarcodeReaderScanMode.Auto,
// Add image filters for better recognition
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new InvertFilter(),
new ContrastFilter()
}
};
// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);
// Process results
if (results.Any())
{
foreach (var barcode in results)
{
Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Confidence: {barcode.Confidence}%");
Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
Console.WriteLine("---");
}
}
else
{
Console.WriteLine("No barcodes found in the image.");
}
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;
// Create custom reader options
var options = new BarcodeReaderOptions()
{
// Specify expected barcode types for better performance
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,
// Define specific area to scan (x, y, width, height in pixels)
CropArea = new Rectangle(100, 100, 500, 400),
// Set reading speed to balance accuracy and performance
Speed = ReadingSpeed.Balanced,
// Enable multithreading for better performance
Multithreaded = true,
MaxParallelThreads = 4,
// Remove false positives for accuracy
RemoveFalsePositive = true,
// Minimum scan lines that must agree for a valid result (default 2)
MinScanLines = 1,
// Enable Code39 extended mode if needed
UseCode39ExtendedMode = true,
// Set scan mode
ScanMode = BarcodeReaderScanMode.Auto,
// Add image filters for better recognition
ImageFilters = new ImageFilterCollection() {
new SharpenFilter(),
new InvertFilter(),
new ContrastFilter()
}
};
// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);
// Process results
if (results.Any())
{
foreach (var barcode in results)
{
Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Confidence: {barcode.Confidence}%");
Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
Console.WriteLine("---");
}
}
else
{
Console.WriteLine("No barcodes found in the image.");
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Linq
' Create custom reader options
Dim options As New BarcodeReaderOptions() With {
' Specify expected barcode types for better performance
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.Code39,
' Define specific area to scan (x, y, width, height in pixels)
.CropArea = New Rectangle(100, 100, 500, 400),
' Set reading speed to balance accuracy and performance
.Speed = ReadingSpeed.Balanced,
' Enable multithreading for better performance
.Multithreaded = True,
.MaxParallelThreads = 4,
' Remove false positives for accuracy
.RemoveFalsePositive = True,
' Minimum scan lines that must agree for a valid result (default 2)
.MinScanLines = 1,
' Enable Code39 extended mode if needed
.UseCode39ExtendedMode = True,
' Set scan mode
.ScanMode = BarcodeReaderScanMode.Auto,
' Add image filters for better recognition
.ImageFilters = New ImageFilterCollection() From {
New SharpenFilter(),
New InvertFilter(),
New ContrastFilter()
}
}
' Read barcodes with custom options
Dim results = BarcodeReader.Read("C:\path\to\your\barcode-image.png", options)
' Process results
If results.Any() Then
For Each barcode In results
Console.WriteLine($"Barcode Type: {barcode.BarcodeType}")
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Confidence: {barcode.Confidence}%")
Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}")
Console.WriteLine("---")
Next
Else
Console.WriteLine("No barcodes found in the image.")
End If
從程式碼片段中可見,要使用 BarcodeReaderOptions,必須先進行初始化,然後根據上述所述的屬性來確定並調整 BarcodeReaderOptions 的屬性。 初始化的 BarcodeReaderOptions 隨後可與影像檔案一同作為 BarcodeReader.Read() 方法的參數使用。這將在從影像讀取 BARCODE 時,套用 BarcodeReaderOptions 中的所有設定。
若您遇到BarCode無法被識別的問題,我們的疑難排解指南提供了常見問題的解決方案,以及提升BarCode掃描精準度的技巧。
常見問題
C#中條碼讀取支持哪些圖片格式?
IronBarcode支持從多種圖片格式讀取條碼,包括SVG(可縮放向量圖形)、JPEG、PNG、GIF、TIFF(標記圖像文件格式)和BMP(點陣圖像文件)。這種全面的格式支持由IronDrawing驅動,實現了從各種圖片類型中無縫提取條碼。
如何用一行代碼從圖片文件中讀取條碼?
使用IronBarcode,您可以通過一行代碼從圖片中讀取條碼:`var results = IronBarCode.BarcodeReader.Read("path/to/image.png");`。這個簡單的方法調用可以自動檢測並提取PNG、JPEG、GIF、BMP和TIFF文件中的條碼數據,而無需複雜設置。
我可以指定要在讀取圖片時查找哪些類型的條碼嗎?
可以,IronBarcode允許您使用BarcodeReaderOptions中的ExpectBarcodeTypes屬性來指定條碼類型。這種針對性的方式改善了讀取性能,因為它只關注您期望在圖片中找到的條碼格式。
是否可以從圖片的特定區域讀取條碼?
當然可以!IronBarcode提供了CropArea屬性,可讓您指定圖片中條碼所在的特定區域。這個功能對於大圖像或當您知道條碼的大致位置時特別有用,可以顯著提高處理速度。
如何配置高級讀取設置以提高準確性?
IronBarcode提供了BarcodeReaderOptions類來配置高級讀取設置。這包括自定義條碼檢測靈敏度、圖像預處理和其他參數的選項,可以在處理挑戰性的圖像或特定條碼類型時提高準確性。
什麼使得C#開發者從圖片中讀取條碼變得簡單?
IronBarcode通過提供適用於多種圖片格式的BarcodeReader.Read()方法,簡化了條碼讀取。開發者只需指定文件名稱或文件路徑作為參數,即可輕鬆將條碼讀取功能整合到任何C#應用程式中。
IronBarcode是否提供自定義條碼外觀的支持?
是的,IronBarcode提供了廣泛的條碼外觀自定義選項,包括顏色、大小和文字註釋,讓您可以根據具體設計需求定制條碼。
IronBarcode如何幫助改善業務流程效率?
IronBarcode通過使條碼生成和讀取快速且準確來提高業務流程效率,減少手動數據輸入錯誤,並改善庫存和資產追蹤。
將IronBarcode實現於專案中需要什麼程式設計技能?
基本的C#程式設計知識足以將IronBarcode實現於專案中,因為它提供了簡單的方法和全面的文檔來指導開發者。
IronBarcode適合於小型專案和大型企業應用嗎?
IronBarcode設計為可擴展且多功能,使其適合小型專案和需要強大條碼解決方案的大型企業應用。

