如何在C#中從圖片中讀取條碼

如何使用C#從圖片讀取條碼

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

IronBarcode通過使用BarcodeReader.Read()在C#中僅需一行程式碼即可從圖片中讀取條碼,支持多種圖片格式,包括PNG、JPEG、GIF、BMP、TIFF和SVG,並提供可自定義的選項以提高性能和準確性。

IronBarcode的其中一項關鍵功能是能在多種圖片格式中自動讀取條碼。 IronBarcode當前支持以下圖片格式:

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

這是通過我們的開源程式庫IronDrawing實現的。 欲了解完整的支持條碼格式清單,包括1D和2D型別,請查閱我們的詳細文件。

快速入門:幾秒鐘內從圖片讀取條碼

只需一個簡單的IronBarCode.BarcodeReader.Read()調用,您就可以直接從圖片文件格式(如PNG、JPEG、GIF、BMP和TIFF)中提取條碼資料。 立即開始——無需複雜設置,只需獲得即時結果。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/BarCode

    PM > Install-Package BarCode
  2. 複製並運行這段程式碼片段。

    var results = IronBarCode.BarcodeReader.Read("path/to/image.png");
  3. 部署以在您的實時環境中測試

    今天就開始在您的專案中使用IronBarcode,透過免費試用

    arrow pointer

我如何直接從圖片中讀取條碼?

以下是使用IronBarcode進行條碼讀取的方法。 關於在C# /.NET中讀取條碼的綜合教程,包括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
$vbLabelText   $csharpLabel
帶有定位圖樣的範例 QR 碼,用於測試從影像讀取條碼
樣本測試QR碼
白底黑色垂直線的範例條碼,用於測試以影像為基礎的條碼讀取
樣本測試條碼

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

要使用IronBarcode,您首先需要通過Microsoft Visual Studio NuGet套件管理器將IronBarcode程式庫安裝到您的專案中,如下圖所示。 這將允許您存取IronBarcode的BarcodeReader.Read()方法以直接讀取條碼圖片。

IronBarcode通過僅允許使用者使用BarcodeReader.Read()來簡化過程,只需將文件名字串或文件路徑字串作為方法的參數即可讀取已包含在專案中的圖片文件。 最佳做法是在方法中指定文件路徑時使用逐字字串文字,即"@",以避免在文件路徑字串中新增多個轉義字元"\"。

System.String[]物件。

要將結果輸出到控制台,您可以使用Console.WriteLine()方法,以迭代變數作為參數。

IronBarcode能夠在各種圖片格式中讀取1維條碼格式(Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, Aztec, DataMatrix, QRCode)。

我如何配置條碼閱讀器選項以獲得更好的性能?

找到條碼讀取太慢了嗎? 圖片中的條碼太小,以至於IronBarcode無法讀取? 想僅閱讀圖片的某些區域嗎? 想要從圖片中的多個條碼中只讀取某種型別的條碼? 想要改進整體讀取性能嗎?

BarcodeReaderOptions允許使用者調整或調整條碼閱讀器的行為,以解決所有這些問題。 欲了解關於設置條碼閱讀器選項的詳細範例,請查閱我們的全程指南。以下部分將逐一討論BarcodeReaderOptions中所有可調節的屬性。

我如何指定圖片中要讀取的區域?

BarcodeReaderOptions中使用,允許使用者指定IronBarcode應當讀取圖片中的區域。 這有助於提高讀取性能,因為條碼讀取器不會整個圖片掃描條碼,以及提高讀取精度,因為讀取區域已被指定。 了解更多有關如何指定裁剪區域以獲得最佳性能。

要設置Rectangle型別物件,並將長方形的坐標、寬度和長度作為參數指定。 接受的測量單位是像素(px)。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-3.cs
// 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
}
$vbLabelText   $csharpLabel

我應該指定哪些條碼型別以更快地讀取?

預設情況下,IronBarcode中所有支持的條碼都會在圖片中被掃描。 然而,如果使用者知道圖片中有哪些型別的條碼可用或希望被讀取,那麼設置此屬性以僅讀取某些型別的條碼將大大提高讀取性能和準確性,因為條碼閱讀器不需要遍歷條碼集合來解釋和讀取條碼。

要使用此屬性,只需將BarcodeEncoding枚舉中之一個字段。 以下範例列出了IronBarcode支持的每種條碼型別。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-4.cs
// 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
}
$vbLabelText   $csharpLabel

我應該什麼時候禁用多個條碼讀取?

IronBarcode將預設掃描圖片中所有可用的條碼,這包括掃描整個圖片文件並將讀到的條碼值新增到字串陣列中。 然而,如果使用者不希望在一個圖片文件中讀取多個條碼,使用者可以將此屬性設置為false,這將使條碼閱讀器一旦找到條碼值便停止掃描。 這將再次提高IronBarcode的性能和閱讀速度。 有關讀取多個條碼的更多資訊,請參閱我們的專用指南。

圖像過濾器如何提高條碼識別?

BarcodeReaderOptions中可以新增的一個屬性是圖像過濾器集合。 圖像過濾器對於預處理輸入給IronBarcode的原始圖片非常重要。 要在ImageFilter集合以供使用。 有關圖像校正技術的全面指南,包括過濾器應用,請存取我們的教程。

我如何優化執行緒以獲得更好的性能?

IronBarcode允許使用者啟用和調整多執行緒執行的數量,這將提高速度和過程的效率。 並行執行緒意味著在不同處理器核心上同時執行多個執行緒。 IronBarcode中MaxParallelThread屬性的預設數量為4。使用者可以根據其電腦的性能和資源數量來調整它。

我應該啟用多執行緒處理嗎?

這一屬性使IronBarcode可以並行讀取多個圖片。 #Multithreaded的預設值為true,因此將自動管理多個執行緒以改善條碼批量讀取任務的性能。

為什麼我應該移除假陽性讀取?

這一屬性會移除任何假陽性的條碼讀取結果。 假陽性條碼讀取結果簡單來說是對條碼值的錯誤讀取,但被認定為有效。 這可能是由於排序過程中的錯誤或條碼標籤或準備過程中的錯誤而發生的。 因此,將RemoveFalsePositive設置為true將移除假陽性條碼讀取結果,從而提高條碼讀取的準確性。 不過,如果使用者選擇將性能優先於準確性,將此屬性設置為false可能會有所幫助。此屬性的預設值為true

MinScanLines如何影響檢測準確性?

MinScanLines設置了必須達成一致的條碼結果的最小掃描線數以使其被認為是有效的。 預設值為2。增加此值會減少假陽性,但可能會阻止檢測到細小或低質量的條碼。 將其降低到1會增加對難度條碼的敏感性,但也有引入噪聲的風險。

不同的使用案例有哪些掃描模式可用?

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

  • Auto: 使用自動圖像預處理和最佳讀取器選項配置來讀取條碼。 建議使用的效果和性能最好。
  • OnlyDetectionModel: 掃描圖片上的條碼並將其位置返回為IronSoftware.Drawing.PointF的陣列。 此模式並不讀取檢測到的條碼; 它只返回每個條碼的位置。
  • MachineLearningScan: 使用機器學習檢測掃描圖片以獲取條碼並讀取它們。
  • OnlyBasicScan: 未使用機器學習檢測、未自動圖像預處理或未讀取器選項配置來讀取條碼。 此選項可以單獨用於IronBarCode.Slim

閱讀速度設置如何影響準確性?

顧名思義,Speed屬性允許使用者進一步優化IronBarcode閱讀器的性能。 類似於RemoveFalsePositive屬性,調整此屬性會以降低準確性為代價提高性能。 有關閱讀速度選項的深入了解,包括性能基準,請查看我們的詳細指南。它接受ReadingSpeed枚舉,其中包含以下4個級別:

  • Faster: 激活最快的條碼讀取,但準確性下降。 該過程略過圖像預處理,通常導致空條碼結果。 僅在輸入圖像銳利且清晰時使用此設置。
  • Balanced: 推薦此設置給Speed屬性。 它在準確性和讀取性能間設置平衡,嘗試在圖像上應用輕微處理以突出條碼區域,使它在條碼讀取器中脫穎而出來檢測。 大多數情況下,此設置足以讓IronBarcode讀取條碼圖片並產生準確的輸出。
  • Detailed: 在使用設置ReadingSpeed.Detailed。 IronBarcode將對圖片進行中等處理,以進一步清晰地闡明條碼區域,便於條碼讀取器檢測到條碼。 此設置對檢測小或不太清晰的條碼圖片十分有用。
  • ExtremeDetail: 由於其CPU密集的過程,此設置是最建議的。 將對條碼圖片進行重度處理,以便讀取器讀取條碼。 建議使用者在選擇此設置之前對圖片進行預處理/應用過濾器。

我應該什麼時候使用Code39擴展模式?

此設置允許Code39型別條碼使用擴展模式讀取和解釋,並應用完整ASCII字元集。 將UseCode39ExtendedMode設置為true會使Code39條碼的讀取更準確。

我如何使用自定義選項實現高級條碼讀取?

既然我們已了解可由使用者調整的所有選項,無論是為了提高性能還是準確性,這就是如何在程式碼中應用它們。 下面的程式碼片段演示了BarcodeReaderOptions的全面使用:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-5.cs
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 = BarcodeScanMode.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($"Position: {string.Join(", ", barcode.Points.Select(p => $"({p.X}, {p.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 = BarcodeScanMode.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($"Position: {String.Join(", ", barcode.Points.Select(Function(p) $"({p.X}, {p.Y})"))}")
        Console.WriteLine("---")
    Next
Else
    Console.WriteLine("No barcodes found in the image.")
End If
$vbLabelText   $csharpLabel

從程式碼片段中可以看出,要使用BarcodeReaderOptions的屬性。 初始化的BarcodeReaderOptions中的所有設置。

如果您遇到條碼未被識別的問題,我們的故障排除指導提供了常見問題的解決方案以及提高條碼掃描準確性的技巧。

常見問題

在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設計為可擴展且多功能,使其適合小型專案和需要強大條碼解決方案的大型企業應用。

Hairil Hasyimi Bin Omar
軟體工程師
和所有偉大的工程師一樣,Hairil是一位充滿熱情的學習者。他正在完善自己對C#、Python和Java的知識,並利用這些知識為Iron Software的團隊成員創造價值。Hairil從馬來西亞的瑪拉工藝大學畢業,擁有化學與流程工程學士學位,後加入Iron Software團隊。
準備好開始了嗎?
Nuget 下載 2,317,217 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想快速驗證嗎? PM > Install-Package BarCode
運行範例觀看您的字串成為條碼。