如何在 C# 中從影像讀取條碼

How to Read Barcodes From Image Files (JPEG, PNG, GIF, TIFF, SVG, BMP)

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode 的一個主要功能是能夠立即從多種圖像格式中讀取條碼。 IronBarcode 目前支持以下圖像格式:

  • 可縮放矢量圖形(SVG)
  • 聯合照片專家組(JPEG)
  • 便攜式網絡圖形(PNG)
  • 圖形交換格式(GIF)
  • 標記圖像文件格式(TIFF)
  • 位圖圖像文件(BMP)

This is made possible with the help of our open source library, IronDrawing.

快速入門:在幾秒鐘內從圖像中讀取條碼

只需一個簡單的 IronBarCode.BarcodeReader.Read() 調用,即可從 PNG、JPEG、GIF、BMP 和 TIFF 等圖像文件格式中提取條碼數據。 立即開始—無需複雜設定,直接獲得結果。

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. Copy and run this code snippet.

    var results = IronBarCode.BarcodeReader.Read("path/to/image.png");
  3. Deploy to test on your live environment

    Start using IronBarcode in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

最小化工作流程(5 步)

How to Read Barcodes From Images in C#
  1. 下載 C# 庫以從圖像中讀取條碼
  2. 使用 Read 方法從各種圖像格式中讀取條碼值
  3. 利用 BarcodeReaderOptions 類配置讀取設置
  4. 使用 CropArea 屬性指定圖像中的條碼區域
  5. 通過設置 ExpectBarcodeTypes 屬性指定要讀取的條碼類型

直接從圖像中讀取條碼

現在,讓我們看看如何實際上使用 IronBarcode 進行條碼讀取:

: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
$vbLabelText   $csharpLabel
QRcodeintro related to 直接從圖像中讀取條碼
樣本測試 QR 碼
Code128intro related to 直接從圖像中讀取條碼
樣本測試條碼

想知道樣本中的條碼值是多少?試試代碼片段吧!

使用 IronBarcode 的第一步是通過 Microsoft Visual Studio 的 NuGet 程式包管理器將 IronBarcode 庫安裝到您的專案中,如下圖所示。 這將允許您訪問 IronBarcode 的 BarcodeReader.Read() 方法以直接讀取條碼圖像。

IronBarcode 提供簡單易用的方法,允許用戶僅使用 BarcodeReader.Read() 方法讀取已經包含在專案中的圖像文件,通過指定字串的 文件名文件路徑 作為方法的參數。 最佳做法是使用直接字符串字面值 "@",當方法中指定文件路徑時,以避免在文件路徑字符串中添加多個轉義字符 "\"。

Values() 方法附加在 BarcodeReader.Read() 方法調用的末尾來獲取作為 System.String[] 對象的條碼值。

要將結果輸出到控制台,可以使用 foreach 循環遍歷存儲在 string[] 陣列中的值,並在循環塊內調用 Console.WriteLine() 方法,使用迭代變量作為參數。

IronBarcode 能夠在多種圖像格式中讀取一維條碼格式(Codabar、Code128、Code39、Code93、EAN13、EAN18、ITF、MSI、UPCA、UPCE)以及二維條碼格式(Aztec、DataMatrix、QRCode)。

設置條碼讀取選項

覺得條碼讀取太慢了? 條碼在圖片中太小,使得 IronBarcode 無法讀取嗎? 想只讀取圖像的某些區域? 想只讀取圖像中混合有多種類型條碼的特定條碼? 想改善整體讀取性能? 別擔心!

BarcodeReaderOptions 允許用戶調整或調整條碼識別器的行為,以解決上述所有問題。 讓我們詳細了解可在 BarcodeReaderOptions 中可調整的所有屬性。

CropArea

CropAreaBarcodeReaderOptions 中的 IronSoftware.Drawing.CropRectangle 類型的屬性,允許用戶指定 IronBarcode 應讀取的圖像區域。 這有助於提高讀取性能,因為條碼識別器不會掃描整個圖像以尋找條碼,還能提高讀取準確性,因為已經指定了讀取區域。

要設置 CropArea 屬性,只需實例化一個新的 Rectangle 類型對象,並指定矩形的坐標、寬度和長度作為參數。 接受的度量單位是像素(px)。

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height);
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height);
' Example of setting CropArea
Dim cropArea = New IronSoftware.Drawing.Rectangle(x, y, width, height)
$vbLabelText   $csharpLabel

ExpectBarcodeTypes

預設情況下,IronBarcode 會掃描圖像中的所有支持的條碼。 但是,如果用戶知道圖像中有哪些條碼類型可用或者希望讀取的條碼類型,設置此屬性以僅讀取特定類型的條碼將大大提高讀取性能和準確性,因為條碼識別器不需要遍歷條碼集合來解釋和讀取條碼。

要使用這個屬性,只需將 ExpectBarcodeTypes 設置為 BarcodeEncoding 枚舉中的一個字段。 以下是 IronBarcode 支持的每種條碼類型的示例。

這是一份條碼類型列表,包含早先提供的示例和說明。

ExpectMultipleBarcodes

IronBarcode 會默認掃描圖像中所有可用的條碼,這包括掃描整個圖像文件並將讀取的條碼值添加到字符串陣列中。 但是,如果用戶不希望讀取圖像文件中的多個條碼,用戶可以將此屬性設置為 false,這將使條碼識別器在找到一個條碼值後停止掃描。 這將再次提高 IronBarcode 的性能和讀取速度。

ImageFilters

可以在 BarcodeReaderOptions 中添加的一個屬性是圖像濾鏡集合。 圖像濾鏡對 IronBarcode 提供的原始圖像進行預處理非常重要。 要在 BarcodeReaderOptions 中應用圖像濾鏡,用戶首先必須啟動並指定要使用的 ImageFilter 集合。

MaxParallelThreads

IronBarcode 允許用戶啟用和調整並行線程執行的數量,這將提高過程的速度和效率。 並行線程表示在不同的處理器核心上同時執行多個線程。 IronBarcode 中的 MaxParallelThread 屬性的默認數量是 4。用戶可以根據其機器的能力和資源數量進行調整。

Multithreaded

此屬性使 IronBarcode 能夠並行讀取多個圖像。 Multithreaded 的默認值為 true,因此將自動管理多個線程以提高清除任務的性能。

RemoveFalsePositive

此屬性會刪除任何錯誤的正讀條碼。 錯誤的正讀條碼只是指錯誤讀取的條碼值,但被識別為有效。 這可能由於排序過程中的錯誤或條碼標籤或準備過程中的錯誤造成。 因此,將 RemoveFalsePositive 設置為 true 將刪除錯誤的正讀條碼,提高條碼讀取準確性。 但是,如果用戶選擇性能而犧牲準確性,將此屬性設置為 false 將有助於提高性能。此屬性的默認值為 true

ScanMode

定義 IronBarcode 如何在圖像中掃描和檢測條碼。

  • Auto: 使用自動圖像預處理和最優化的讀取器選項配置讀取條碼。 建議獲得最佳結果和性能。
  • OnlyDetectionModel: 掃描圖像中的條碼並返回其位置作為 IronSoftware.Drawing.PointF 陣列。 此模式並不會讀取檢測到的條碼; 它只返回每個條碼的位置。
  • MachineLearningScan: 使用機器學習檢測掃描圖像中的條碼並讀取它們。
  • OnlyBasicScan: 不使用機器學習檢測、不進行自動圖像預處理或配置讀取選項的條碼讀取。 此選擇只可以使用 IronBarCode.Slim。

讀取速度

速度 屬性如其名稱所示,允許用戶進一步優化 IronBarcode 讀取器的性能。 類似於 RemoveFalsePositive 屬性,調整此屬性可以在準確性上提高性能。可接受的類型為 ReadingSpeed 枚舉,其中有 4 級,如下所示: - Faster: 啟用最快的條碼讀取,但會降低準確性。

該過程跳過圖像預處理,經常會導致條碼結果為空。 只有當輸入圖像清晰和明確時才使用此設置。 - Balanced: 此設置是 推薦的 速度 屬性。 其在準確性和讀取性能之間取得了平衡,通過嘗試對圖像進行輕度處理來使條碼區域更加清晰,使條碼讀取器可以檢測到。 大多數情況下,IronBarcode 可以使用此設置讀取條碼圖像並產生準確的輸出。 - Detailed: 在使用 ReadingSpeed.Balanced 設置無法成功從讀取中產生條碼值的情況下,用戶可以選擇使用 ReadingSpeed.Detailed。 IronBarcode 會對圖像進行中度處理以使條碼區域更進一步和更加清晰,使條碼讀取器可以檢測到條碼。 此設置對檢測小條碼或不太清晰的條碼圖像非常有用。 - ExtremeDetail: 由於其對 CPU 的密集處理過程,這是 最不 推薦的設置。 將對條碼圖像進行重度處理以使讀取器可以讀取條碼。 這將大大降低 IronBarcode 的讀取性能。 建議用戶在選擇此設置之前對圖像進行預處理/應用濾鏡。 此設置允許讀取並解釋 Code39 類型條碼擴展模式,其中將應用完整的 ASCII 字符集。

此設置允許讀取並解釋 Code39 類型條碼擴展模式,其中將應用完整的 ASCII 字符集。

UseCode39ExtendedMode 設置為 true 將啟用更準確的 Code39 條碼讀取。 ## 從圖像進行高級條碼讀取

現在我們已經了解了可以由用戶調整的選擇項以提高性能或準確性,讓我們看看如何在代碼中應用它。

以下代碼片段展示。 從代碼片段中,我們可以看出,要使用 BarcodeReaderOptions 我們首先必須初始化它,然後根據上述屬性決定和調整 BarcodeReaderOptions 的屬性。

// Insert actual C# code for advanced barcode reading from images here
// Ensure the necessary options and settings are demonstrated in the example
// Insert actual C# code for advanced barcode reading from images here
// Ensure the necessary options and settings are demonstrated in the example
' Insert actual C# code for advanced barcode reading from images here
' Ensure the necessary options and settings are demonstrated in the example
$vbLabelText   $csharpLabel

可以將初始化的 BarcodeReaderOptions 作為參數與圖像文件一起在 BarcodeReader.Read() 方法中使用。這將在從圖像讀取條碼時應用所有 BarcodeReaderOptions 中的設置。 The initialized BarcodeReaderOptions can then be used as an argument in the BarcodeReader.Read() method along with the image file. This will apply all the settings in BarcodeReaderOptions when reading a barcode from the image.

常見問題解答

如何在 .NET 應用程式中從影像讀取條碼?

你可以使用 IronBarcode 的 BarcodeReader.Read() 方法從影像文件(如 JPEG、PNG、GIF、TIFF、SVG 和 BMP)讀取條碼。

IronBarcode 中有哪些選項可用以自訂條碼讀取?

BarcodeReaderOptions 類允許透過設置 CropAreaExpectBarcodeTypesImageFiltersMaxParallelThreadsRemoveFalsePositive 等屬性來自訂條碼讀取。

如何提高應用程式中條碼讀取的準確性?

提高條碼讀取準確性可透過使用 RemoveFalsePositive 屬性來消除假陽性,並使用如 Detailed 或 ExtremeDetail 的選項調整讀取速度來實現。

在 .NET 中是否可以執行多執行緒條碼讀取?

可以,IronBarcode 支援多執行緒條碼讀取。你可以透過將 Multithreaded 屬性設為 true 來啟用該功能,這將允許自動管理執行緒。

如何指定影像的一個區域以掃描條碼?

你可以在 IronBarcode 的 BarcodeReaderOptions 類中設置 CropArea 屬性來指定影像中要掃描的區域。

使用機器學習在條碼讀取中的好處是什麼?

使用機器學習來檢測條碼可以增強讀取的準確性和效率,透過適應不同的影像條件和改善 IronBarcode 的識別能力。

如何在 IronBarcode 中處理不同的條碼格式?

IronBarcode 能夠讀取 1D 和 2D 條碼格式。你可以使用 ExpectBarcodeTypes 屬性來指定期望的條碼類型。

在 .NET 專案中安裝條碼讀取庫的過程是什麼?

要在 .NET 專案中安裝 IronBarcode 庫,請使用 Microsoft Visual Studio 中的 NuGet 封裝管理器下載並整合該庫。

IronBarcode 中有哪些影像預處理選項?

IronBarcode 通過 ImageFilters 屬性提供影像預處理選項,允許用戶在讀取條碼之前增強影像。

如何優化大圖像文件的條碼讀取效能?

可以通過設置 MaxParallelThreads 來利用多個執行緒以及根據你的需求調整讀取速度來優化效能。

Hairil Hasyimi Bin Omar
軟體工程師
和所有优秀的工程师一样,Hairil 是个努力学习者。他正在细化自己的 C# 、Python 和 Java 知识,将这些知识应用于 Iron Software 各个团队成员以增加价值。Hairil 自马来西亚 Universiti Teknologi MARA 加入 Iron Software 团队,并以化学与工艺工程学士学位毕业。
準備好開始了嗎?
Nuget 下載 1,935,276 | 版本: 2025.11 剛剛發布