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(Joint Photographic Experts Group)
  • 휴대용 네트워크 그래픽(PNG)
  • GIF(그래픽 교환 형식)
  • TIFF(Tagged Image File Format)
  • 비트맵 이미지 파일(BMP)

This is made possible with the help of our open source library, IronDrawing. 지원되는 바코드 형식의 전체 목록은 종합 문서를 확인하십시오.

빠른 시작: 몇 초 만에 이미지에서 바코드 읽기

단순히 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를 사용하는 방법을 설명합니다. PDF 처리 및 일괄 작업에 대한 고급 기술을 포함하여 C#/ .NET에서 바코드를 읽는 방법에 대한 종합 튜토리얼을 확인하세요.

: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());
}
$vbLabelText   $csharpLabel
Sample QR code with finder patterns for testing barcode reading from images
샘플 테스트 QR 코드
Sample barcode with black vertical lines on white background for testing image-based barcode reading
샘플 테스트 바코드

샘플에서 바코드 값이 무엇인지 알고 싶으신가요? 코드 스니펫으로 시도해보세요!

IronBarcode를 사용하려면 먼저 Microsoft Visual Studio NuGet 패키지 관리자에서 프로젝트에 IronBarcode 라이브러리를 설치해야 합니다. 아래 그림과 같이 설치하세요. IronBarcode의 BarcodeReader.Read() 메서드를 사용하여 직접 바코드 이미지를 읽을 수 있습니다.

IronBarcode는 사용자가 파일 이름 문자열 또는 파일 경로 문자열을 메서드의 매개변수로 지정하여 프로젝트에 이미 포함된 이미지 파일을 읽기 위해 BarcodeReader.Read() 만 사용하도록 함으로써 단순성을 제공합니다. 파일 경로를 메서드에서 지정할 때 여러 개의 이스케이프 문자 '\'를 파일 경로 문자열에 추가하지 않으려면 어문 문자열 리터럴 "@"를 사용하세요.

BarcodeReader.Read() 메서드 호출의 끝에 Values() 메서드를 붙여서 바코드 값을 System.String[] 객체로 얻을 수 있습니다.

콘솔에 결과를 출력하려면 string[] 배열에 저장된 값을 반복하여 foreach 루프를 사용할 수 있으며, 루프 블록 안에서 반복자 변수를 매개변수로 하여 Console.WriteLine() 메서드를 호출하십시오.

IronBarcode는 1차원 바코드 형식 (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE) 및 2차원 바코드 형식 (Aztec, DataMatrix, QRCode)을 다양한 이미지 형식에서 읽을 수 있습니다.

더 나은 성능을 위해 바코드 리더 옵션을 어떻게 구성할 수 있습니까?

바코드 읽기가 너무 느리신가요? 그림 속 바코드가 너무 작아 IronBarcode가 읽을 수 없나요? 이미지의 특정 영역만 읽고 싶으신가요? 바코드가 혼합된 이미지에서 특정 유형의 바코드만 읽고 싶으신가요? 전체적인 읽기 성능을 향상시키고 싶으신가요?

BarcodeReaderOptions은 바코드 판독기의 동작을 조정하여 이러한 모든 문제를 해결할 수 있게 해줍니다. 바코드 판독기 설정에 대한 자세한 예제는 종합 가이드를 참고하십시오. 다음 섹션에서는 BarcodeReaderOptions에 사용할 수 있는 모든 조정 가능한 속성들을 하나씩 설명합니다.

이미지의 어느 영역을 읽을지 어떻게 지정합니까?

CropAreaIronSoftware.Drawing.CropRectangle 유형의 속성이며 BarcodeReaderOptions에서 사용할 수 있으며, IronBarcode가 읽어야 할 이미지의 영역을 지정할 수 있게 해줍니다. 이것은 바코드 리더가 전체 이미지에서 바코드를 스캔하지 않게 함으로써 읽기 성능을 향상시키고 읽기의 정확성을 향상시킵니다. 최적의 성능을 위한 크롭 영역 지정에 대해 자세히 알아보세요.

CropArea 속성을 설정하려면, 단순히 새로운 Rectangle 유형의 객체를 인스턴스화하고 직사각형의 좌표, 너비 및 길이를 인수로 지정하면 됩니다. 허용되는 측정 단위는 픽셀(px)입니다.

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
$vbLabelText   $csharpLabel

더 빠른 읽기를 위해 어떤 바코드 유형을 지정해야 합니까?

기본적으로, IronBarcode의 모든 지원되는 바코드는 이미지에서 스캔됩니다. 그러나 사용자가 가용한 바코드 유형을 알거나 이미지에서 읽기를 원하는 경우, 이 속성을 특정 유형의 바코드만 읽도록 설정하면 바코드 리더가 바코드를 해석하고 읽기 위해 바코드 컬렉션을 반복할 필요가 없기 때문에 읽기 성능과 정확성이 크게 향상됩니다.

이 속성을 사용하려면, 해당 ExpectBarcodeTypesBarcodeEncoding 열거형의 필드 중 하나로 설정하면 됩니다. 아래는 IronBarcode에서 지원하는 모든 바코드 유형의 예입니다.

// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
$vbLabelText   $csharpLabel

여기에는 예제와 함께 이전에 제공된 바코드 유형의 목록입니다.

다중 바코드 읽기를 언제 비활성화해야 합니까?

IronBarcode는 기본적으로 이미지에서 이용 가능한 모든 바코드를 스캔하며, 이는 전체 이미지 파일을 스캔하고 읽은 바코드 값을 문자열 배열에 추가하는 것을 포함합니다. 그러나 사용자가 이미지 파일에서 여러 바코드를 읽기를 원치 않는 경우, 이 속성을 false로 설정하면 바코드 리더는 바코드 값이 발견되면 스캔을 중지하게 됩니다. 이것은 다시 IronBarcode의 성능과 읽기 속도를 향상시킵니다. 다중 바코드 읽기에 대한 자세한 정보를 보려면 전용 가이드를 참조하십시오.

이미지 필터가 바코드 인식을 어떻게 향상시킬까요?

BarcodeReaderOptions에 추가할 수 있는 속성 중 하나는 이미지 필터의 모음입니다. 이미지 필터는 IronBarcode에 제공되는 원시 이미지를 전처리하는 데 중요합니다. BarcodeReaderOptions 내에 이미지 필터를 적용하려면 사용자가 먼저 사용할 ImageFilter 컬렉션을 시작하고 지정해야 합니다. 필터 응용 프로그램을 포함한 이미지 보정 기술에 대한 포괄적인 가이드를 보려면 우리의 튜토리얼을 방문하세요.

성능 향상을 위해 스레딩을 어떻게 최적화할 수 있나요?

IronBarcode는 사용자가 병렬 스레드 실행의 양을 설정하고 조정할 수 있도록 하여 프로세스의 속도와 효율성을 향상시킵니다. 병렬 스레드는 여러 스레드를 서로 다른 프로세서 코어에서 동시에 실행한다는 것을 의미합니다. IronBarcode에서 MaxParallelThread 속성의 기본 양은 4입니다. 사용자는 시스템의 자원과 능력에 따라 조정할 수 있습니다.

멀티스레드 처리 기능을 활성화해야 할까요?

이 속성은 IronBarcode가 여러 이미지를 병렬로 읽을 수 있게 해줍니다. Multithreaded의 기본값은 true이기 때문에, 다수의 스레드가 자동으로 관리되어 대량의 바코드 읽기 작업에서 성능을 향상시킵니다.

왜 잘못된 긍정 판독을 제거해야 하나요?

이 속성은 잘못된 긍정 바코드 판독을 제거합니다. 잘못된 긍정 바코드 판독은 바코드 값이 잘못 판독되지만 유효한 것으로 식별되는 것을 의미합니다. 이것은 시퀀싱 과정의 오류, 바코드 라벨링 또는 준비 과정의 오류 때문에 발생할 수 있습니다. 따라서 RemoveFalsePositive를 true로 설정하면 잘못된 바코드 판독을 제거하여 바코드 판독의 정확성을 높입니다. 그러나 사용자가 정확도 대신 성능을 선택하면 이 속성을 false로 설정하는 것이 도움이 됩니다. 이 속성의 기본값은 true입니다.

다양한 사용 사례를 위한 스캔 모드는 무엇인가요?

IronBarcode가 이미지에서 바코드를 스캔하고 감지하는 방법을 정의합니다.

  • Auto: 이미지 자동 전처리 및 가장 최적화된 리더 옵션이 구성된 상태에서 바코드를 읽습니다. 최고의 결과와 성능을 위해 추천됩니다.
  • OnlyDetectionModel: 바코드를 위해 이미지를 스캔하고 그 위치를 IronSoftware.Drawing.PointF 배열로 반환합니다. 이 모드에서는 감지된 바코드는 읽지 않습니다; 각 바코드의 위치만 반환합니다.
  • MachineLearningScan: 기계 학습 감지를 통해 이미지에서 바코드를 스캔하고 이를 읽습니다.
  • OnlyBasicScan: 기계 학습 감지, 자동 이미지 전처리 및 리더 옵션 구성 없이 바코드를 읽습니다. This option can be used with IronBarCode.Slim alone.

읽기 속도 설정이 정확성에 어떻게 영향을 미치나요?

이름에서 알 수 있듯이, Speed 속성은 사용자가 IronBarcode 리더의 성능을 추가로 최적화할 수 있게 합니다. RemoveFalsePositive 속성과 유사하게 이 속성을 조정하면 정확도 대신 성능이 향상됩니다. 읽기 속도 옵션에 대한 심층적인 내용을 포함한 성능 벤치마크를 보고 싶다면 우리의 자세한 가이드를 참조하세요. ReadingSpeed enum을 받아들이며, 4단계의 수준을 갖고 있습니다:

  • Faster: 가장 빠른 바코드 읽기를 가능하게 하지만 정확성은 감소합니다. 이 과정에서는 이미지 전처리를 건너뛰기 때문에 종종 빈 바코드 결과가 발생합니다. 입력 이미지가 선명하고 명확한 경우에만 이 설정을 사용하세요.
  • 균형 잡힌: 이 설정은 Speed 속성에 권장됩니다. 정확성과 읽기 성능 사이의 균형을 설정하여 바코드 구역을 명확히 하기 위해 이미지에 경량 처리를 시도합니다. 대부분의 경우, 이 설정은 IronBarcode가 바코드 이미지를 읽고 정확한 출력을 생성하기에 충분합니다.
  • 자세한: ReadingSpeed.Balanced 설정을 사용해도 읽은 바코드 값이 제대로 생성되지 않는 경우, 사용자는 ReadingSpeed.Detailed 사용하는 것을 선택할 수 있습니다. IronBarcode는 바코드 구역을 더욱더 명확하고 선명하게 하기 위해 이미지에 중간 처리 과정을 수행합니다. 이 설정은 작거나 덜 선명한 바코드 이미지를 감지하는데 매우 유용합니다.
  • ExtremeDetail: 이 설정은 CPU 집약적인 프로세스 때문에 가장 추천되지 않음입니다. 바코드 이미지를 읽기 위해 리더가 바코드를 읽을 수 있도록 무거운 처리가 수행됩니다. 사용자는 이 설정을 선택하기 전에 이미지 전처리/필터 적용을 권장합니다.

언제 Code39 확장 모드를 사용해야 하나요?

이 설정은 Code39 유형의 바코드를 확장 모드로 읽고 해석할 수 있게 하여 전체 ASCII 문자 집합이 적용되도록 합니다. UseCode39ExtendedModetrue로 설정하면 Code39 바코드의 더 정확한 판독이 가능합니다.

사용자 정의 옵션을 사용한 고급 바코드 읽기를 어떻게 구현하나요?

이제 성능이나 정확도를 향상시키기 위해 사용자가 조정할 수 있는 모든 옵션을 배웠으니, 코드에서 이를 적용하는 방법을 설명드리겠습니다. 아래의 코드 예제는 BarcodeReaderOptions의 포괄적인 사용법을 보여줍니다:

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,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.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($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
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,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.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($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
$vbLabelText   $csharpLabel

코드 스니펫에서, BarcodeReaderOptions를 사용하려면 먼저 초기화하고, 그 다음에 위에서 언급한 속성에 따라 BarcodeReaderOptions의 속성을 결정하고 조정해야 함을 알 수 있습니다. 초기화된 BarcodeReaderOptions는 이미지 파일과 함께 BarcodeReader.Read() 메서드에서 인수로 사용될 수 있습니다. 이것은 이미지에서 바코드를 읽을 때 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# 애플리케이션에 바코드 읽기 기능을 매우 쉽게 통합할 수 있습니다.

하릴 하시미 빈 오마르
소프트웨어 엔지니어
모든 훌륭한 엔지니어처럼, 하이릴은 열정적인 학습자입니다. 그는 C#, Python, Java에 대한 지식을 갈고닦아 Iron Software의 팀원들에게 가치를 더하고 있습니다. 하이릴은 말레이시아의 Universiti Teknologi MARA에서 화학 및 공정 공학 학사 학위를 취득한 후 Iron Software 팀에 합류했습니다.
시작할 준비 되셨나요?
Nuget 다운로드 2,108,094 | 버전: 2026.3 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package BarCode
샘플을 실행하세요 실이 바코드로 변하는 모습을 지켜보세요.