如何從圖像文件(jpg、png、gif、tiff、svg、bmp)中讀取條碼

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

海里海西米·賓·奧馬




C# NuGet 程式庫用于

安裝與 NuGet

Install-Package BarCode
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

C# NuGet 程式庫用于

安裝與 NuGet

Install-Package BarCode
Java PDF JAR

下載 DLL

下載DLL

手動安裝到您的項目中

立即開始在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

查看 IronBarcodeNuget 快速安裝和部署。已被下載超過800萬次,它正用C#改變。

C# NuGet 程式庫用于 nuget.org/packages/BarCode/
Install-Package BarCode

請考慮安裝 IronBarcode DLL 直接下載並手動安裝到您的專案或GAC表單: IronBarCode.zip

手動安裝到您的項目中

下載DLL

直接從圖像讀取條碼

IronBarcode 的一個關鍵特性是能夠直接從多種圖像格式中讀取條碼。這包括:

  • 可縮放向量圖形 (SVG) (SVG)

    • 聯合攝影專家組織 (JPEG)

    可攜式網路圖形 (PNG)

    • 圖形互換格式 (GIF)

    標記圖像文件格式 (TIFF)

    位圖圖像檔案 (BMP)

這是藉助我們的開源庫實現的, 鐵繪圖現在讓我們看看如何使用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
VB   C#
測試樣本 QR 碼
樣本測試條碼

想知道樣品中的條碼值嗎?試試這段程式碼吧! 要使用 IronBarcode,首先需要通過 Microsoft Visual Studio 的 NuGet 套件管理器將 IronBarcode 庫安裝到您的項目中,如下圖所示。這樣您就可以訪問 IronBarcode 了。 BarcodeReader.Read() 直接讀取條碼圖像的方法。

從上面的代碼片段中,我們可以看到IronBarcode通過允許用戶僅使用 BarcodeReader.Read() 讀取已經包含在專案中的圖像檔案,方法是指定 檔案名稱 字串,或 檔案路徑 在方法中使用字符串作為參數。最佳實踐是在指定檔案路徑時使用逐字字符串字面量 "@",因為如果不這樣做,則需要用戶在檔案路徑字符串中添加多個轉義字符 "\"。 價值觀() 方法結束時 BarcodeReader.Read() 方法呼叫以獲取條碼值作為 a System.String [] 物件。

要在控制台顯示結果,您可以使用 foreach 迴圈來遍歷儲存的值 字串 [] 陣列,在迴圈區塊內,呼叫 控制台.寫行() method with the iterator variable as the parameter.

This method does not only able to read 1-Dimensional barcode formats(Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE),它也能讀取二維條碼格式(阿兹特克碼, 資料矩陣碼, 二維碼) 以各種圖像格式。

設置條碼閱讀器選項

覺得條碼讀取速度太慢?條碼在圖片中太小,IronBarcode 無法讀取?想要只讀取圖像的某些區域?想要只讀取圖片中混合的某種類型的條碼?想要提高整體讀取性能?不用再擔心了!

條碼讀取器選項 允許用戶調整或修改條碼閱讀器的行為,以解決上述所有問題。讓我們詳細看看並討論所有可調節的屬性。 條碼讀取器選項 逐一:

裁剪區域

裁剪區域 是類型的屬性 IronSoftware.Drawing.CropRectangle 可用於 條碼讀取器選項 允許用戶指定用戶希望 IronBarcode 讀取的圖像區域。這將有助於提高讀取性能,因為條碼閱讀器不需要掃描整個圖像來搜尋條碼,並且提高讀取準確性,因為已經指定了讀取區域。

設置 裁剪區域 只需實例化一個新的Rectangle型別物件並指定矩形的座標、寬度和長度作為引數即可。接受的測量單位是像素(px).

CropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height)

期望條碼類型

默认情况下,IronBarcode 将扫描图像中的所有支持的条码。但是,如果用戶知道图像中可用的条码类型或希望读取的条码类型,设置此属性为仅读取某些类型的条码,将大大提高读取性能和准确性,因为条码阅读器不需要遍历条码集合来解释和读取条码。

要使用此属性,只需设置 期望條碼類型 到其中一個欄位 條碼編碼 enum。我們來學習 IronBarcode 支援的每種條碼類型,並查看每一種條碼的範例。

  • 一維全能 : 條形碼的線性類型。這包括 Codabar、Code128、Code39、Code93、EAN13、EAN18、ITF、MSI、UPCA、UPCE 條形碼。

  • 二維全集 這包括格線、矩陣和堆疊條碼。屬於二維條碼的條碼類型有Aztec、DataMatrix、QRCode條碼。

  • 阿茲特克 : 阿茲特克 2D barcode format. 阿茲特克 Code is a type of 2D barcode invented by Andrew Longacre, Jr. and Robert Hussey in 1995. Named after the resemblance of the central finder pattern to an 阿茲特克 pyramid, 阿茲特克 code has the potential to use less space than other matrix barcodes because it does not require a surrounding blank "quiet zone". Below is an example of an 阿茲特克 Barcode
  • 阿茲特克 barcode sample
    阿茲特克 Barcode
  • Codabar : Codabar 是一種線性條碼符號,由 Pitney Bowes Corp. 於1972年開發。Codabar 編碼 數據(數字). 以下是 Codabar 條碼的示例
  • Codabar 條碼範例
    Codabar 條碼
  • Code128 Code 128 是一種高密度線性條碼符號,由 ISO/IEC 15417:2007 定義。它用於 字母數字或僅數字 條碼。以下是 Code128 條碼的示例
  • Code128 條碼樣本
    Code128 條碼
  • Code39 Code 39 是一種可變長度的離散條碼符號學。Code 39 規範 定義43個字符,由大寫字母組成 (A 到 Z)。以下是一個 Code39 條碼的範例
  • Code39 條碼範例
    Code39 條碼
  • Code93 :Code 93 一維條碼格式。Code 93 是由 Intermec 於1982年設計的條碼符號學,用於提供比 Code 39 更高的密度和數據安全增強。Code 93 支援編碼 只有以下的 ASCII 字符: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - . $ / + % 空格。下面是一個 Code93 條碼的範例
  • Code93條碼範例
    Code93 條碼
  • 資料矩陣 資料矩陣是一種二維條碼,由排列成方形或矩形圖案的黑白「單元」或模塊組成,也稱為矩陣。要編碼的信息可以是 文字或數據. Usual data size is from a few bytes up to 1556 bytes. Below is an example of a 資料矩陣 barcode
  • 資料矩陣 barcode sample
    資料矩陣 Barcode
  • EAN13 國際商品編號(也稱為歐洲商品編號或EAN)是一種標準,描述了一種條形碼符號和編號系統,該系統用於全球貿易中以識別特定製造商的特定包裝配置中的特定零售產品類型。EAN-13 可能 僅編碼長度為12或13位數的數字(數字)內容. 較短的條碼將會自動在數字的開頭補上尾隨的零(000)。以下是 EAN13 條碼的例子
  • EAN13 條碼範例
    EAN13條碼
  • EAN8 一個 EAN-8 是一種 EAN/UPC 符號條碼,源自於更長的國際貨品編碼 (EAN-13) 條碼。EAN-8 可能 僅編碼長度為7或8位數字的數字內容較短的條碼會自動在數字前面添加尾隨零(000)。以下是一個 EAN8 條碼的示例
  • EAN8 條碼範例
    EAN8 條碼
  • 智慧郵件 : 智能郵件2D條碼格式。智能郵件條碼(也稱為“IM條碼”或“美國郵政署OneCode條碼”或“IMB”)是一種用於美國郵件的65條條碼。“智能郵件”一詞指的是美國郵政署為國內郵件投遞提供的服務。IM條碼旨在提供比其前身POSTNET和PLANET更豐富的信息和功能。請注意IronBarcode可以 僅供閱讀 這種類型的條碼。以下是此類型條碼的範例
  • 智慧郵件 barcode sample
    智慧郵件 Barcode
  • ITF ITF-14 是 GS1 實施的交錯 2 of 5 (ITF) 條碼,用於編碼全球貿易項目編號。ITF-14 符號通常用於產品的包裝級別,例如一箱 24 罐湯的盒子。ITF-14 總是編碼 14 位數字。ITF 編碼 僅限數據如果數字位數不是偶數,將自動在前面加上「0」。以下是 ITF 條碼的示例
  • ITF 條碼範例
    ITF 條碼
  • MaxiCode : MaxiCode 二維條碼格式。MaxiCode 是由聯合包裹服務公司最初創建和使用的一種公共領域機器可讀符號系統。適用於追蹤和管理包裹的運輸,它類似於條碼,但使用排列在六邊形網格中的點。請注意,IronBarcode 可以 僅供閱讀 這種類型的條碼。以下是此類型條碼的範例
  • MaxiCode條碼範例
    MaxiCode 條碼
  • MSI : MSI 是由 MSI Data Corporation 開發的一種條碼符號學,基於原始的 普萊西 Code 符號學。這種條碼 僅接受數值. 以下是 MSI 類型條碼的範例
  • MSI 條碼範例
    微星條碼
  • PDF417 PDF417 是一種堆疊線性條碼符號格式,廣泛應用於運輸、身份識別卡和庫存管理。PDF 代表可攜式數據文件。417 表示代碼中的每個圖案由 4 條和空格組成,每個圖案長度為 17 單位。PDF417 符號學由 Symbol Technologies 的王應俊博士於 1991 年發明。(王 1993) 它是 ISO 標準 15438。以下是 PDF417 條碼的示例。
  • PDF417 條碼範例
    PDF417 條碼
  • 藥碼 : 藥品二進制碼。醫藥行業中使用的具有閱讀錯誤容忍性的二進制條碼標準。請注意,IronBarcode 可以 僅供閱讀 this type of barcode. Below is an example of a 藥碼 barcode
  • 藥碼 barcode sample
    藥碼 Barcode
  • 普萊西 : 普萊西 Code is a 1D linear barcode symbology based on pulse width modulation, developed in 1971 by The 普萊西 Company PLC, a British-based company. This barcode type 僅接受數值. Below is an example of a 普萊西 barcode
  • 普萊西 barcode sample
    普萊西 Barcode
  • QR碼 QR 碼(由快速響應碼縮寫而來)是用于一種矩陣條碼(或二維條碼)的商標,最早於1994年為日本的汽車工業設計。條碼是一種機器可讀的光學標籤,包含關於所附物品的信息。QR 碼使用四種標準化的編碼模式(數字、字母數字、字節/二進制和漢字)來有效地存儲數據;也可以使用擴展功能。下方是一個 QR 碼條碼的例子
  • QR碼 barcode sample
    QR碼 Barcode
  • RSS14 :減少空間符號 14 條碼格式。可以表示一維條碼或堆疊的二維條碼。RSS 14 條碼(減少空間符號)將完整的 14 位 EAN.UCC 商品識別編碼在一個可由適當配置的銷售點激光掃描器全方向掃描的符號中。它是來自 EAN 國際和統一代碼委員會公司新的條碼類型,用於空間受限的識別。RSS 條碼已被確認針對食品雜貨行業和醫療保健行業,其中物品太小,無法使用其他條碼符號。請注意,IronBarcode 可以 僅供閱讀 this type of barcode. Below is an example of RSS14 barcode
  • 1D RSS14 條碼示例
    1 Dimensional RSS14 Barcode
    2D RSS14 條碼範例
    2 Dimensional RSS14 Barcode
  • UPCA : 通用產品代碼(UPC)是一種條碼符號,廣泛用於美國、加拿大、英國、澳大利亞、新西蘭、歐洲及其他國家,在商店內追蹤貿易商品。UPC(技術上是指UPC-A)由12個數字組成,這些數字是唯一分配給每個貿易商品的。與相關的EAN條碼一起,UPC是根據GS1規格,在銷售點掃描貿易商品的主要條碼。UPCA可能 僅編碼長度為12或13位數的數字(數字)內容較短的條碼將自動在數字的開頭添加尾部零 (000)。以下是一個UPCA條碼的範例。
  • UPCA 條碼範例
    UPCA 條碼
  • UPCE 為了允許在較小的包裝上使用 UPC 條碼,如果完整的 12 位數條碼無法噴印,開發了一種 UPC 的「零抑制」版,稱為 UPC-E,其中系統號碼位、製造商代碼中的所有尾隨零和產品代碼中的所有前導零都被抑制。UPCE 可能 僅編碼長度為7或8位數字的數字內容以下是一個 UPCE 條碼範例
  • UPCE 條碼範例
    UPCE 條碼

ExpectMultipleBarcodes

IronBarcode 將預設掃描圖像中所有可用的條碼,這包括掃描整個圖像文件並將讀取到的條碼值添加到字符串數組中。然而,如果用戶不希望在圖像文件中讀取多個條碼,用戶可以設置此屬性為 錯誤 這將使條碼閱讀器在找到條碼值後停止掃描。這將再次提高IronBarcode的性能和讀取速度。

影像濾鏡

其中一個可以添加的屬性 條碼讀取器選項 是一個影像濾鏡集合。影像濾鏡在將原始影像輸入 IronBarcode 前的預處理過程中非常重要。要在裡面應用影像濾鏡 條碼讀取器選項,使用者必須首先啟動並指定 影像濾鏡 用來使用的集合。

最大平行執行緒數量

IronBarcode 也允許用戶啟用並調整平行執行緒的數量,從而提高處理速度和效率。平行執行緒是指在不同處理器核心上同時執行的多個執行緒。默認數量為 最大平行執行緒 IronBarcode中的屬性是4。用戶可以根據機器的能力和資源量進行調整。

多執行緒

這個屬性允許 IronBarcode 並行讀取多個圖像。默認值为 多執行緒因此,將自動管理多個線程,以提高批量條碼讀取任務的性能。

移除誤報

此屬性會移除任何誤報的條碼讀取。假 positive barcode reads 只是指錯誤地讀取了條碼值,但被識別為有效。這可能是由於定序過程中的錯誤,例如定序錯誤,或條碼標籤或準備過程中的錯誤。因此,設置 移除誤報 設定此屬性為 true 將會消除錯誤的條碼讀取結果,從而提高條碼讀取的準確性。然而,如果使用者希望性能優先於準確性,則可以將此屬性設置為 會有所幫助。此屬性的預設值是 .

速度

如其名稱所示, 速度 使用户能够进一步优化 IronBarcode 条码读取器的性能。和 移除誤報 属性,调整此属性将在牺牲准确性的情况下改善性能,但在如下所示的四个级别中:

  • Reading速度.Faster

    设置 速度 將這個屬性设置為此值將使條碼讀取速度最快,但以犧牲準確性為代價。程序將快速完成執行,但大多數情況下會產生空白條碼結果。這是因為輸入圖像沒有經過預處理。 完全 IronBarcode 直接讀取條碼影像。建議用戶僅在確信輸入影像清晰且銳利的情況下使用此值。 Reading速度.Balanced

    此設定是 推薦 為了 速度 屬性。它通過嘗試對圖像應用光處理來設置準確性和讀取性能之間的平衡,以使條碼區域更加清晰突出,從而讓條碼閱讀器檢測到。大多數情況下,這個設置足以讓 IronBarcode 讀取條碼圖像並產生準確的輸出。 Reading速度.Detailed

    在使用設定的情況下 Reading速度.Balanced 無法從讀取中生成條碼值時,使用者可以選擇使用 Reading速度.DetailedIronBarcode將對影像進行中等處理,以使條碼區域更加清晰明瞭,方便條碼閱讀器(barcode reader)檢測條碼。此設定對於檢測小型或不太清晰的條碼影像非常有用。

請注意,此設定會占用大量CPU資源,可能會影響讀取效能。建議用戶在使用此設定前嘗試其他設定。 Reading速度.Detailed移除誤報 設為 "True" 將在控制台顯示警告。但這不會影響讀取,可以忽略。

Reading速度.ExtremeDetail

這個設定是 the <strong>最少</strong> 推薦設定由於其CPU密集型過程,其中將在條碼圖像上執行重度處理,以使閱讀器能夠讀取條碼。這將大大降低IronBarcode的讀取性能。建議用戶在選擇此設置之前,先對圖像進行預處理/應用濾鏡。

請注意,該設置是CPU密集型的,並且可能會影響讀取性能。應鼓勵用戶在使用此設置之前,嘗試其他設置的組合。 Reading速度.ExtremeDetail移除誤報 設置為「True」將在控制台打印警告。然而,這不會影響讀取,可以忽略。

使用Code39擴展模式

此設置允許Code39類型的條碼以擴展模式進行讀取和解釋,從而應用完整的ASCII字符集。 使用Code39擴展模式 將使閱讀Code39條碼更加準確。

從圖像中進階條碼讀取

既然我們已經了解所有可以由使用者調整的選項,無論是提高性能或準確性,讓我們看看如何在我們的代碼中應用它。以下程式碼片段進行了演示。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-2.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptions = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional, //or AllTwoDimensional
    ExpectMultipleBarcodes = true, // Default is true
    MaxParallelThreads = 2, // Default is 4
    Speed = ReadingSpeed.Detailed, // 4 levels of speed. Default is Balanced
    CropArea = new IronSoftware.Drawing.Rectangle(x: 242, y: 1124, width: 359, height: 378), // Units are in px
    ImageFilters = new ImageFilterCollection { new BinaryThresholdFilter() }, // Assign to image filter object name
    Multithreaded = true, // Default is true
    UseCode39ExtendedMode = true, // Default is true

};

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg", myOptions); // Image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myOptions As New BarcodeReaderOptions() With {
	.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
	.ExpectMultipleBarcodes = True,
	.MaxParallelThreads = 2,
	.Speed = ReadingSpeed.Detailed,
	.CropArea = New IronSoftware.Drawing.Rectangle(x:= 242, y:= 1124, width:= 359, height:= 378),
	.ImageFilters = New ImageFilterCollection From {New BinaryThresholdFilter()},
	.Multithreaded = True,
	.UseCode39ExtendedMode = True
}

Private myBarcode = BarcodeReader.Read("image_file_path.jpg", myOptions) ' Image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
VB   C#

從代碼片段中,我們可以看到為了使用 條碼讀取器選項 我們必須先初始化它,然後我們才能確定並調整屬性。 條碼讀取器選項 根據上述性質。初始化 條碼讀取器選項 然后可以作为参数使用在 BarcodeReader.Read() 方法和圖像文件一起。這將應用所有設置在 條碼讀取器選項 從圖片中讀取條碼時。

海里海西米·賓·奧馬

軟體工程師

和所有優秀的工程師一樣,Hairil 是一位熱衷學習的人。他正在精進自己對 C#、Python 和 Java 的知識,利用這些知識為 Iron Software 團隊的成員創造價值。Hairil 從馬來西亞的馬來西亞工藝大學加入了 Iron Software 團隊,他在那裡獲得了化學和過程工程學士學位。