如何從流中讀取條碼C#

如何使用 C# 從串流中讀取條碼

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

<! -- 引言實作示意圖 --> <!--說明:說明程式碼概念的圖表或截圖 -->

IronBarcode 可直接從 .NET 應用程式中的 MemoryStream 物件讀取條碼,而無需先將流儲存至磁碟。這使得從存儲在記憶體中的圖像和 PDF 文件流中高效地處理條碼成為可能。

MemoryStream 是一個 .NET Framework 類別,可從記憶體儲存的串流讀取或寫入。 它處理資料時不需要實體檔案,而是將資料儲存在記憶體中。 此方法適用於 Web 應用程式、API 或以位元組陣列接收條碼資料或需要在不建立臨時檔案的情況下處理影像的場景。

除了從影像檔案PDF檔案讀取條碼外,IronBarcode 也能從串流中讀取條碼。 該函式庫接受 PDF 文件或影像流作為輸入,並輸出 BarCode 讀取結果。 此功能適合處理資料庫、Web 上傳或記憶體快取內容的資料。

快速入門:直接從影像流讀取 BarCode

使用 IronBarcode 的兩行程式碼即可從任何影像流中讀取條碼 - 無需寫入磁碟。 本範例示範在 .NET 中基於流的 BarCode 讀取。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 IronBarcode

    PM > Install-Package BarCode

  2. 複製並運行這段程式碼。

    var result = IronBarCode.BarcodeReader.Read(myImageStream);
    Console.WriteLine(result[0].Text);
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronBarcode,免費試用!
    arrow pointer

如何從影像流中讀取 BarCode?

<! -- 從影像流實作讀取條碼的示意圖 --> <!--說明:說明程式碼概念的圖表或截圖 -->

為何使用記憶體串流而非檔案?

記憶體串流比起以檔案為基礎的作業具有多項優點。 它們可消除磁碟 I/O 開銷,使應用程式更快速。 由於敏感的 BarCode 資料從未接觸磁碟,因此可提高安全性。 它們也適合磁碟存取有限或昂貴的雲端環境。結合 IronBarcode 的 async 和多執行緒功能,您可以同時處理多個串流,以獲得最高效能。

本節說明如何使用 IronBarcode 讀取一個影像串流以及儲存於 List<MemoryStream> 中的多個影像串流。 以下程式碼包含註解以說明過程:

支援哪些類型的影像格式?

IronBarcode 從串流讀取時支援多種影像格式:JPEG、PNG、GIF、TIFF、BMP 和 SVG。 這種靈活性讓處理 BarCode 影像不受源格式的限制。 為達到最佳效果,請使用 BarCode 閱讀器設定 來微調閱讀過程。

using IronBarCode;
using System;
using System.Collections.Generic;
using System.IO;

class BarcodeFromImageStream
{
    static void Main(string[] args)
    {
        // Create a list of MemoryStreams to store image streams
        List<MemoryStream> imageStreams = new List<MemoryStream>
        {
            // Example of adding an existing MemoryStream object to the list
            new MemoryStream(File.ReadAllBytes("example1.png")),
            new MemoryStream(File.ReadAllBytes("example2.png"))
        };

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-streams-1.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.IO;

class BarcodeFromImageStream
{
    static void Main(string[] args)
    {
        // Create a list of MemoryStreams to store image streams
        List<MemoryStream> imageStreams = new List<MemoryStream>
        {
            // Example of adding an existing MemoryStream object to the list
            new MemoryStream(File.ReadAllBytes("example1.png")),
            new MemoryStream(File.ReadAllBytes("example2.png"))
        };

using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;
using System.IO;

List<MemoryStream> list = new List<MemoryStream>();
list.Add(AnyBitmap.FromFile("image1.jpg").ToStream());
list.Add(AnyBitmap.FromFile("image2.jpg").ToStream());
list.Add(AnyBitmap.FromFile("image3.png").ToStream());

var myBarcode = BarcodeReader.Read(list);

foreach (var barcode in myBarcode)
{
    Console.WriteLine(barcode.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.IO

Friend Class BarcodeFromImageStream
	Shared Sub Main(ByVal args() As String)
		' Create a list of MemoryStreams to store image streams
		Dim imageStreams As New List(Of MemoryStream) From {
			New MemoryStream(File.ReadAllBytes("example1.png")),
			New MemoryStream(File.ReadAllBytes("example2.png"))
		}

Dim IronBarCode As using
Using IronSoftware.Drawing
	Dim System As using
	Using System.Collections.Generic
		Using System.IO
			
			Dim list As New List(Of MemoryStream)()
			list.Add(AnyBitmap.FromFile("image1.jpg").ToStream())
			list.Add(AnyBitmap.FromFile("image2.jpg").ToStream())
			list.Add(AnyBitmap.FromFile("image3.png").ToStream())
			
			Dim myBarcode = BarcodeReader.Read(list)
			
			For Each barcode In myBarcode
				Console.WriteLine(barcode.ToString())
			Next barcode
		End Using
	End Using
End Using
$vbLabelText   $csharpLabel

如何處理多個影像串流?

上面的程式碼顯示 IronBarcode 在 BarcodeReader.Read() 方法中接受單一 MemoryStream 物件或 MemoryStream 物件清單。 本範例將圖像檔案轉換為 MemoryStream 物件,並直接從串流讀取條碼。

在處理多個碼流時,IronBarcode 會有效地使用其讀取速度選項。 根據您的需求調整閱讀速度 - 是否需要最高的精確度或最快的處理時間。對於從單一資料流中讀取多個條碼,IronBarcode 會自動檢測並返回所有找到的條碼。

若要在串流中使用不完美或低品質的影像以提高精確度,請在處理前套用 影像修正篩選器。 這可大幅提高 BarCode 的辨識率。

如何從 PDF 文件流中讀取 BarCode?

<! -- Diagram illustrating read barcodes from pdf document stream implementation --> <!--說明:說明程式碼概念的圖表或截圖 -->

為何使用 ReadPdf() 而非 Read()?

ReadPdf() 方法專門針對 PDF 文件進行了優化,與通用的 Read() 方法相比具有優勢。 它能有效處理 PDF 的特定功能,例如多頁文件、向量圖形和內嵌圖像。 該方法可自動處理所有 PDF 頁面,並處理各種 PDF 格式和壓縮類型。如需瞭解全面的功能,請參閱 讀取 BarCode 教程

本節示範使用 IronBarcode 讀取 PDF 文件檔案為 MemoryStream 物件或 PDF 文件流的清單。 以下是程式碼:

多個 PDF 文件怎麼辦?

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

MemoryStream document = PdfDocument.FromFile(@"file_path.pdf").Stream;

var myBarcode = BarcodeReader.ReadPdf(document);

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

Private document As MemoryStream = PdfDocument.FromFile("file_path.pdf").Stream

Private myBarcode = BarcodeReader.ReadPdf(document)

For Each value In myBarcode
	Console.WriteLine(value.ToString())
Next value
$vbLabelText   $csharpLabel

如何高效處理多個 PDF 串流?

MemoryStream 物件從 PDF 文件讀取條碼與從影像讀取類似。 關鍵差異在於方法:BarcodeReader.ReadPdf() 專門處理 PDF 文件。 本範例使用 IronPDF 將 PDF 文件轉換為 MemoryStream 物件。

對於多個 PDF 文件,在將其送入 BarcodeReader.ReadPdf() 之前,先將所有 PDF 合併為一個文件流。 此方法比分別處理每個 PDF 更有效率,並可減少記憶體開銷。 配置PDF 特定的 BarCode 閱讀器設定,以最佳化您文件的讀取。

針對進階方案,可處理特定頁面或 PDF 區域。 IronBarcode 允許指定頁面範圍和頁面中的裁剪區域,針對條碼出現的區域進行裁剪。 這可提高大型文件的處理速度。

在生產中使用串流時,請正確處理 MemoryStream 物件,以防止記憶體洩漏。 using 語句可確保自動處理:

using (MemoryStream pdfStream = new MemoryStream(pdfBytes))
{
    var results = BarcodeReader.ReadPdf(pdfStream);
    // Process results
}
using (MemoryStream pdfStream = new MemoryStream(pdfBytes))
{
    var results = BarcodeReader.ReadPdf(pdfStream);
    // Process results
}
Imports System.IO

Using pdfStream As New MemoryStream(pdfBytes)
    Dim results = BarcodeReader.ReadPdf(pdfStream)
    ' Process results
End Using
$vbLabelText   $csharpLabel

進行實驗並根據您的特定需求調整資料庫。 IronBarcode 靈活的 API 允許廣泛的讀取流程自訂,從調整偵測靈敏度到指定預期的條碼格式。

常見問題解答

如何從串流讀取 BarCode 而不先儲存到磁碟?

IronBarcode 可讓您直接從 MemoryStream 物件讀取條碼,而無需儲存至磁碟。只需將您的流傳給BarcodeReader.Read()方法。此方法可消除磁碟 I/O 開銷,非常適合處理來自 Web 上傳、資料庫或 API 的影像。

當處理流時,Barcode 閱讀器支援哪些影像格式?

IronBarcode 從串流讀取時支援多種影像格式,包括 JPEG、PNG、GIF、TIFF、BMP 和 SVG。這種靈活性使您無需轉換格式即可處理來自不同來源的 BarCode 圖像。

我可以同時處理多個 BarCode 影像串流嗎?

是的,IronBarcode 支持异步和多线程功能,允许您同时处理多个条码流以获得最高性能。這在從記憶體處理大量條碼讀取操作時特別有用。

與基於檔案的 BarCode 讀取方式相比,使用記憶體串流有哪些優點?

採用 IronBarcode 的記憶體串流處理,可消除磁碟 I/O 開銷,提供更快的效能;由於敏感資料從未接觸磁碟儲存空間,因此安全性得以提升;並且與磁碟存取可能受限或昂貴的雲端環境相容性更佳。

如何從 PDF 文件流中讀取 BarCode?

IronBarcode 可以從圖片和 PDF 文件流中讀取條碼。只需將您的 PDF MemoryStream 傳送至 BarcodeReader.Read() 方法,它便會提取並解碼在 PDF 頁面中找到的所有條碼。

當使用串流工作時,是否可以微調 BarCode 讀取程序?

是的,IronBarcode 提供可自定義的條碼讀取器設定,無論是處理單一資料流或儲存於集合中的多個資料流,都能讓您針對特定的使用情況最佳化讀取程序。

Hairil Hasyimi Bin Omar
軟體工程師
就像所有優秀的工程師一樣,Hairil 也是一位狂熱的學習者。他不斷精進 C#、Python 和 Java 的知識,利用這些知識為整個 Iron Software 的團隊成員增加價值。Hairil 從馬來西亞的 Universiti Teknologi MARA 大學加入 Iron Software 團隊,畢業於該校的化學與流程工程學系,並取得學士學位。
準備好開始了嗎?
Nuget 下載 2,070,733 | 版本: 2026.2 剛剛發布