如何從圖像文件(jpg、png、gif、tiff、svg、bmp)中讀取條碼
如何在 C# 中從圖像讀取條碼
立即在您的專案中使用IronBarcode,並享受免費試用。
直接從圖片讀取條碼
IronBarcode 的一個主要功能是其能夠直接從多種圖像格式讀取條碼的能力。 這包括:
* 可擴展向量圖形(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
想知道樣品中的條碼值嗎?試試這段程式碼吧! 要使用IronBarcode,首先您必須透過Microsoft Visual Studio NuGet套件管理員將IronBarcode庫安裝到您的項目中,如下圖所示。 這將允許您訪問IronBarcode BarcodeReader.Read()
method to directly read barcode image.
從上面的代碼片段中,我們可以看到 IronBarcode 通過允許用戶只使用 BarcodeReader.Read()
讀取已經包含在專案中的圖像檔案,方法是指定 檔案名稱 字串,或 檔案路徑 將字符串作為方法的參數。 最佳做法是在方法中指定文件路徑時使用逐字字符串文字 "@",因為不包含此字符將需要用戶在文件路徑字符串中添加多個轉義字符 "\"。
附加 價值觀()
方法結束時 BarcodeReader.Read()
方法呼叫以獲取條碼值作為 a System.String []
object.
要在控制台顯示結果,您可以使用 foreach
迴圈來遍歷儲存的值 字串 []
陣列,在迴圈區塊內,呼叫 Console.WriteLine()
method with the iterator variable as the parameter.
此方法不僅能讀取一維條碼格式。(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 支持的每一種條碼類型,並查看每種類型的樣本條碼。
- 一維全能 線性類型的條碼。 This includes Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE barcodes.
- 二維全集 這包括格子、矩陣和堆疊條形碼。 The barcode type that falls under 2 Dimensional barcodes are Aztec, DataMatrix, QRCode barcodes.
- 阿茲特克 : Aztec 2D 條碼格式。Aztec Code 是一種 2D 條碼,由 Andrew Longacre, Jr. 和 Robert Hussey 於 1995 年發明。因其中央查找圖案類似阿茲特克金字塔而得名。Aztec Code 可能佔用的空間比其他矩陣條碼少,因為它不需要周圍的空白“安靜區”。以下是一個 Aztec 條碼的示例
- Codabar : Codabar 是一種線性條碼符號,由 Pitney Bowes Corp. 於1972年開發。Codabar 編碼 數據(數字). 以下是 Codabar 條碼的示例
- Code128 Code 128 是一種高密度線性條碼符號,由 ISO/IEC 15417:2007 定義。它用於 字母數字或僅數字 條碼。以下是 Code128 條碼的示例
- Code39 Code 39 是一種可變長度的離散條碼符號學。Code 39 規範 定義43個字符,由大寫字母組成 (A 到 Z)。以下是一個 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 條碼的範例
- 資料矩陣 資料矩陣是一種二維條碼,由排列成方形或矩形圖案的黑白「單元」或模塊組成,也稱為矩陣。要編碼的信息可以是 文字或數據. 一般資料大小從幾個位元組到1556個位元組不等。以下是一個DataMatrix條碼範例
- EAN13 國際商品編號(也稱為歐洲商品編號或EAN)是一種標準,描述了一種條形碼符號和編號系統,該系統用於全球貿易中以識別特定製造商的特定包裝配置中的特定零售產品類型。EAN-13 可能 僅編碼長度為12或13位數的數字(數字)內容. 較短的條碼將會自動在數字的開頭補上尾隨的零(000)。以下是 EAN13 條碼的例子
- EAN8 一個 EAN-8 是一種 EAN/UPC 符號條碼,源自於更長的國際貨品編碼 (EAN-13) 條碼。EAN-8 可能 僅編碼長度為7或8位數字的數字內容較短的條碼會自動在數字前面添加尾隨零(000)。以下是一個 EAN8 條碼的示例
- 智慧郵件 : 智能郵件2D條碼格式。智能郵件條碼(也稱為“IM條碼”或“美國郵政署OneCode條碼”或“IMB”)是一種用於美國郵件的65條條碼。“智能郵件”一詞指的是美國郵政署為國內郵件投遞提供的服務。IM條碼旨在提供比其前身POSTNET和PLANET更豐富的信息和功能。請注意IronBarcode可以 僅供閱讀 這種類型的條碼。以下是此類型條碼的範例
- ITF ITF-14 是 GS1 實施的交錯 2 of 5 (ITF) 條碼,用於編碼全球貿易項目編號。ITF-14 符號通常用於產品的包裝級別,例如一箱 24 罐湯的盒子。ITF-14 總是編碼 14 位數字。ITF 編碼 僅限數據如果數字位數不是偶數,將自動在前面加上「0」。以下是 ITF 條碼的示例
- MaxiCode : MaxiCode 二維條碼格式。MaxiCode 是由聯合包裹服務公司最初創建和使用的一種公共領域機器可讀符號系統。適用於追蹤和管理包裹的運輸,它類似於條碼,但使用排列在六邊形網格中的點。請注意,IronBarcode 可以 僅供閱讀 這種類型的條碼。以下是此類型條碼的範例
- MSI : MSI 是由 MSI Data Corporation 開發的一種條碼符號學,基於原始的 Plessey Code 符號學。這種條碼 僅接受數值. 以下是 MSI 類型條碼的範例
- PDF417 PDF417 是一種堆疊線性條碼符號格式,廣泛應用於運輸、身份識別卡和庫存管理。PDF 代表可攜式數據文件。417 表示代碼中的每個圖案由 4 條和空格組成,每個圖案長度為 17 單位。PDF417 符號學由 Symbol Technologies 的王應俊博士於 1991 年發明。(王 1993) 它是 ISO 標準 15438。以下是 PDF417 條碼的示例。
- 藥碼 : 藥品二進制碼。醫藥行業中使用的具有閱讀錯誤容忍性的二進制條碼標準。請注意,IronBarcode 可以 僅供閱讀 這種類型的條碼。以下是一個PharmaCode條碼的範例
- 普萊西 普萊析條碼是一種基於脈衝寬度調變的1D線性條碼符號,由位於英國的普萊析公司於1971年開發。這種類型的條碼 僅接受數值. 下面是一個Plessey條碼的範例
- QR碼 QR 碼(由快速響應碼縮寫而來)是用于一種矩陣條碼(或二維條碼)的商標,最早於1994年為日本的汽車工業設計。條碼是一種機器可讀的光學標籤,包含關於所附物品的信息。QR 碼使用四種標準化的編碼模式(數字、字母數字、字節/二進制和漢字)來有效地存儲數據;也可以使用擴展功能。下方是一個 QR 碼條碼的例子
- RSS14 :減少空間符號 14 條碼格式。可以表示一維條碼或堆疊的二維條碼。RSS 14 條碼(減少空間符號)將完整的 14 位 EAN.UCC 商品識別編碼在一個可由適當配置的銷售點激光掃描器全方向掃描的符號中。它是來自 EAN 國際和統一代碼委員會公司新的條碼類型,用於空間受限的識別。RSS 條碼已被確認針對食品雜貨行業和醫療保健行業,其中物品太小,無法使用其他條碼符號。請注意,IronBarcode 可以 僅供閱讀 此類型的條碼。下面是一個 Rss14 條碼的示例
- UPCA : 通用產品代碼(UPC)是一種條碼符號,廣泛用於美國、加拿大、英國、澳大利亞、新西蘭、歐洲及其他國家,在商店內追蹤貿易商品。UPC(技術上是指UPC-A)由12個數字組成,這些數字是唯一分配給每個貿易商品的。與相關的EAN條碼一起,UPC是根據GS1規格,在銷售點掃描貿易商品的主要條碼。UPCA可能 僅編碼長度為12或13位數的數字(數字)內容較短的條碼將自動在數字的開頭添加尾部零 (000)。以下是一個UPCA條碼的範例。
- UPCE 為了允許在較小的包裝上使用 UPC 條碼,如果完整的 12 位數條碼無法噴印,開發了一種 UPC 的「零抑制」版,稱為 UPC-E,其中系統號碼位、製造商代碼中的所有尾隨零和產品代碼中的所有前導零都被抑制。UPCE 可能 僅編碼長度為7或8位數字的數字內容以下是一個 UPCE 條碼範例
預期多個條碼
IronBarcode預設會掃描圖像中的所有條形碼,這包括掃描整個圖像文件並將讀取的條形碼值添加到字符串數組中。 但如果使用者不希望在圖像檔案中讀取多個條碼,使用者可以設定此屬性為 錯誤
這將使條碼讀取器在找到條碼值後停止掃描。 這將再次提升IronBarcode的性能和讀取速度。
圖像過濾器
One of the properties that can be added in 條碼讀取器選項
是一系列的圖像過濾器。 图像过滤器对于预处理馈送到Iron Barcode的原始图像非常重要。 要在內部套用圖像篩選器 條碼讀取器選項
,使用者必須首先啟動並指定 影像濾鏡
用來使用的集合。
最大并行线程
IronBarcode 也允許用戶啟用並調整平行線程執行的數量,這將反過來提高處理的速度和效率。 並行線程是指在不同處理器核心上同時執行多個線程。 預設金額為 最大平行執行緒
IronBarcode中的屬性是4。用戶可以根據機器的能力和資源量進行調整。
多線程
此屬性允許IronBarcode同時讀取多個影像。 預設為 多執行緒
是 真因此,將自動管理多個線程,以提高批量條碼讀取任務的性能。
移除誤報
此屬性將移除所有錯誤的正面條碼讀取。 錯誤的正確條碼讀取僅指條碼值的錯誤讀取,但被識別為有效。 這可能是由於序列化過程中的錯誤,例如序列化錯誤,或者條碼標籤或準備過程中的錯誤。 因此,設定 移除誤報
將 true 設為將會移除假陽性的條碼讀取,從而提高條碼讀取的準確性。 但如果用户为了性能而牺牲准确性,将此属性设置为 假 會有所幫助。此屬性的預設值是 真.
速度
如名稱所示, 速度
讓用戶進一步優化IronBarcode條碼讀取器的性能。 Same as 移除誤報
属性,调整此属性将以牺牲准确性为代价提高性能,具体分为以下四个级别:
ReadingSpeed.Faster
設置
速度
將此屬性設置為此值將使條碼讀取最快,但會以準確性為代價。 程序執行速度很快,但大多數時間都會返回空的條碼結果。這是因為輸入影像沒有經過預處理。 完全 IronBarcode直接讀取條碼圖像。 使用者僅在確信輸入影像銳利且清晰時才建議使用此值。ReadingSpeed.Balanced
此設定是 推薦 為了
速度
屬性。 它通過嘗試對圖像進行輕度處理來平衡精確性和讀取性能,以便澄清條碼區域並使其突出,以便條碼讀取器能夠檢測到。 大多數時候,這個設定足以讓 IronBarcode 讀取條碼圖片並產生準確的輸出。ReadingSpeed.Detailed
在使用設定的情況下
ReadingSpeed.Balanced
無法從讀取中生成條碼值時,使用者可以選擇使用ReadingSpeed.Detailed
. IronBarcode 將對圖像進行中等處理,以便更清晰地澄清條碼區域,讓條碼讀取器更容易檢測到條碼。 此設定非常有用於偵測小型或較不清晰的條碼圖像。請注意,此設定會佔用大量 CPU 資源,可能會影響讀取效能。 在使用此設定之前,建議使用者先嘗試其他設定。 組合
ReadingSpeed.Detailed
與移除誤報
設置為「True」將會在控制台打印一個警告。 然而,它不會影響讀取,可以忽略。ReadingSpeed.ExtremeDetail
此設定是 最少 建議設定因其 CPU 資源密集型過程,將對條碼圖像進行重度處理,以便讀取器能夠讀取條碼。 這將大大降低IronBarcode的讀取性能。 在選擇此設定之前,建議用戶對圖像進行預處理/應用濾鏡。
請注意,此設定會佔用大量 CPU 資源,可能會影響讀取效能。 在使用此設定之前,建議使用者先嘗試其他設定。 組合
ReadingSpeed.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
從代碼片段中,我們可以看到為了使用 條碼讀取器選項
我們必須先初始化它,然後我們才能確定並調整屬性。 條碼讀取器選項
根據上述屬性。 已初始化 條碼讀取器選項
然后可以作为参数使用在 BarcodeReader.Read()
方法和圖像文件一起。這將應用所有設置在 條碼讀取器選項
從圖片中讀取條碼時。