푸터 콘텐츠로 바로가기
다른 구성 요소와 비교
IronBarcode 와 ZXing .NET 라이브러리 비교

IronBarcode 와 ZXing .NET 비교

바코드 스캐너는 때로는 우리의 응용 프로그램에 적합하지 않을 수 있습니다. 이미 디지털 바코드 이미지를 가지고 있으며, 그것이 영어 텍스트로 나타내는 것을 알고 싶을 수 있습니다. 또한, 이 스캐너는 Windows RT 클래스 라이브러리에서만 사용할 수 있으며 제한된 양의 데이터를 포함하는 1차원 바코드만 읽습니다. 2차원 바코드(또는 QR 코드라고도 불림)는 이제 일반적이며 훨씬 더 많은 정보를 담을 수 있습니다.

간단한 API 호출과 몇 가지 코딩 단계를 사용하여 바코드를 읽기 위한 C# 기반 응용 프로그램을 만들 수 있습니다. A .NET 지원 애플리케이션은 서드파티 도구나 API를 사용하지 않고 Windows, macOS, 또는 Linux에서 실행됩니다.

이 기사에서는 프로그래매틱하게 바코드를 읽는 데 가장 강력한 두 개의 .NET Core 앱 라이브러리를 비교할 것입니다. 이 두 라이브러리는 IronBarcode와 ZXing.NET입니다. IronBarcode가 ZXing.NET보다 더 강력하고 견고하게 만드는 것이 무엇인지 살펴보겠습니다.


ZXing.NET이란?

ZXing.NET은 바코드를 디코드하고 생성하는 라이브러리입니다 (QR 코드, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar 등). ZXing은 'zebra crossing'의 약자로, 다양한 1D 및 2D 바코드 형식을 지원하는 Java 기반의 오픈 소스 라이브러리입니다.

그 주요 특성은 다음과 같습니다:

  • URL, 연락처 정보, 일정 이벤트 등을 저장할 수 있는 기능을 가지고 있습니다
  • Java SE 애플리케이션에 맞게 설계되었습니다
  • 인텐트를 통해 바코드 스캐너 통합을 허용합니다
  • 간단한 Google Glass 앱입니다

IronBarcode란?

IronBarcode는 프로그래머가 바코드를 읽고 생성할 수 있게 해주는 C# 라이브러리입니다. IronBarcode는 선도적인 바코드 라이브러리로, 컬러 및 브랜딩된 QR 코드 등 다양한 1차원 및 2차원 바코드를 지원합니다. 이는 .NET Standard와 Core 버전 2 이상을 지원하며, Azure, Linux, macOS, Windows 및 웹에서 크로스 플랫폼으로 사용할 수 있습니다. IronBarcode는 .NET 시스템용으로 C#, VB.NET, F# 개발자가 표준화된 프로그래밍 언어로 작업할 수 있게 해주는 잘 알려진 클래스 라이브러리 또는 구성 요소입니다. 고객이 스캐너 태그를 검색하고 새로운 표준화된 라벨을 생성할 수 있도록 합니다. 2D 바코드 및 기타 3D 표준화된 바코드와 함께 매우 잘 작동합니다.

IronBarcode는 이제 2D 바코드를 지원합니다. 컬러링, 스타일링 및 픽셀화를 최적화하고, 이를 인쇄물이나 광고 자료에 사용할 로고를 추가하는 기능을 제공합니다. 이 라이브러리는 또한 기울어지거나 변형된 바코드를 읽을 수 있으며, 이는 다른 바코드 소프트웨어에서는 읽을 수 없을 수 있습니다.

IronBarcode 및 ZXing.NET 설치

ZXing.NET 설치

ASP.NET Core 애플리케이션에서 ZXing.NET 라이브러리를 사용하려면 NuGet 패키지 관리자 콘솔을 통해 다음 두 가지 패키지를 설치하십시오:

1. ZXing.Net

Install-Package ZXing.Net

2. ZXing.Net.Bindings.CoreCompat.System.Drawing

Install-Package ZXing.Net.Bindings.CoreCompat.System.Drawing -Version 0.16.5-beta

또는 NuGet 패키지 관리자를 사용해 프로젝트에 ZXing.NET을 설치하십시오. 이를 위해 도구 > NuGet 패키지 관리자 > 솔루션에 대한 NuGet 패키지 관리...로 이동한 다음 '검색' 탭으로 전환하여 'ZXing.NET'을 검색하십시오.

A Comparison between IronBarcode and Zxing.NET, Figure 1: ASP.NET 웹 애플리케이션

ASP.NET 웹 애플리케이션

IronBarcode 설치

NuGet 패키지 관리자 또는 제품 웹사이트에서 DLL을 직접 다운로드하여 IronBarcode를 설치하십시오. IronBarcode 네임스페이스에는 모든 IronBarcode 클래스가 포함되어 있습니다.

IronBarcode는 Visual Studio의 NuGet 패키지 관리자를 통해 설치할 수 있습니다: 패키지 이름은 'Barcode'입니다.

Install-Package BarCode

2D 바코드 생성

ZXing.NET 사용

먼저, 프로젝트 파일의 루트 폴더에 'qrr'라는 새 폴더를 만드십시오.

그 다음에 QR 파일을 생성하고 'qrr' 폴더에 이미지 시스템 파일을 저장할 것입니다.

Controller 내부에 GenerateFile() 메서드를 아래 소스 코드와 같이 추가하십시오.

public ActionResult GenerateFile()
{
    return View();
}

[HttpPost]
public ActionResult GenerateFile(string qrText)
{
    Byte [] byteArray;
    var width = 250; // width of the QR Code
    var height = 250; // height of the QR Code
    var margin = 0;

    // BarcodeWriterPixelData acts as a QR code generator
    var qrCodeWriter = new ZXing.BarcodeWriterPixelData
    {
        Format = ZXing.BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Height = height,
            Width = width,
            Margin = margin
        }
    };
    var pixelData = qrCodeWriter.Write(qrText);

    // creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with RGB
    using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
    {
        using (var ms = new MemoryStream())
        {
            var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            try
            {
                // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
           }

            // Save to folder
            string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
            bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);

            // Save to stream as PNG
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byteArray = ms.ToArray();
        }
    }
    return View(byteArray);
}
public ActionResult GenerateFile()
{
    return View();
}

[HttpPost]
public ActionResult GenerateFile(string qrText)
{
    Byte [] byteArray;
    var width = 250; // width of the QR Code
    var height = 250; // height of the QR Code
    var margin = 0;

    // BarcodeWriterPixelData acts as a QR code generator
    var qrCodeWriter = new ZXing.BarcodeWriterPixelData
    {
        Format = ZXing.BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Height = height,
            Width = width,
            Margin = margin
        }
    };
    var pixelData = qrCodeWriter.Write(qrText);

    // creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with RGB
    using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
    {
        using (var ms = new MemoryStream())
        {
            var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            try
            {
                // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
           }

            // Save to folder
            string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
            bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);

            // Save to stream as PNG
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byteArray = ms.ToArray();
        }
    }
    return View(byteArray);
}
$vbLabelText   $csharpLabel

남은 유일한 변경 사항은 'qrr' 폴더에 QR 코드 파일을 저장하는 것입니다. 이것은 아래의 두 줄의 코드를 사용하여 수행됩니다.

string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
$vbLabelText   $csharpLabel

그 다음, GenerateFile 보기를 생성하고 아래 코드를 포함시키십시오. GenerateFile 보기는 Index 보기와 동일합니다.

@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
    <table>
        <tbody>
            <tr>
                <td>
                    <label>Enter text for creating QR Code</label>
                </td>
                <td>
                <input type="text" name="qrText" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <button>Submit</button>
                </td>
            </tr>
        </tbody>
    </table>
}
@{
    if (Model != null)
    {
        <h3>QR Code Successfully Generated</h3>
        <img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
    }
}
@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
    <table>
        <tbody>
            <tr>
                <td>
                    <label>Enter text for creating QR Code</label>
                </td>
                <td>
                <input type="text" name="qrText" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <button>Submit</button>
                </td>
            </tr>
        </tbody>
    </table>
}
@{
    if (Model != null)
    {
        <h3>QR Code Successfully Generated</h3>
        <img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
    }
}
$vbLabelText   $csharpLabel

텍스트 상자에 아무 값이나 입력하고 '제출' 버튼을 클릭하세요. QR 코드는 생성되어 'qrr' 폴더에 .PNG 파일로 저장됩니다.

A Comparison between IronBarcode and ZXing.NET, Figure 2: QR 코드 생성기

QR 코드 생성기

A Comparison between IronBarcode and ZXing.NET, Figure 3: QR 코드 파일 표시됨

QR 코드 파일 표시됨

지원되는 바코드 형식

IronBarcode는 다음을 포함한 널리 사용되는 바코드 형식을 폭넓게 지원합니다:

  • 로고와 색상이 포함된 QR 코드 (장식되고 브랜딩된 코드 포함)
  • Aztec, Data Matrix, CODE 93, CODE 128, RSS Expanded Databar, UPS MaxiCode, USPS, IMB (OneCode) 바코드를 포함한 다중 형식 바코드
  • RSS-14 및 PDF-417 스택형 선형 바코드
  • UPCA, UPCE, EAN-8, EAN-13, Codabar, ITF, MSI, Plessey는 전통적인 숫자 바코드 형식입니다.

바코드 생성 및 저장

using IronBarCode;
// Create a barcode and save it in various formats
var MyBarCode = BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");

// Convert barcode to different image formats and obtain binary data
System.Drawing.Image MyBarCodeImage = MyBarCode.Image;
System.Drawing.Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte[] PngBytes = MyBarCode.ToPngBinaryData();

// Save barcode in PDF stream
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream())
{
    // The Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
}

// Stamp barcode onto an existing PDF at a specific position
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
using IronBarCode;
// Create a barcode and save it in various formats
var MyBarCode = BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");

// Convert barcode to different image formats and obtain binary data
System.Drawing.Image MyBarCodeImage = MyBarCode.Image;
System.Drawing.Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte[] PngBytes = MyBarCode.ToPngBinaryData();

// Save barcode in PDF stream
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream())
{
    // The Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
}

// Stamp barcode onto an existing PDF at a specific position
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
$vbLabelText   $csharpLabel

반면, ZXing은 자바 기반의 오픈소스 1D/2D 바코드 이미지 처리 라이브러리입니다. UPC-A, UPC-E, EAN-8, Code 93, Code 128, QR Code, Data Matrix, Aztec, PDF 417 등의 바코드 형식을 지원합니다.

A Comparison between IronBarcode and Zxing.NET, Figure 4: 지원되는 바코드 형식

지원되는 바코드 형식

IronBarcode를 사용하여 QR 코드 파일 생성

IronBarcode로 QR 코드를 만들기 위해 우리는 QRCodeWriter 클래스를 BarcodeWriter 클래스 대신 사용할 수 있습니다. 이 클래스는 QR 코드를 생성하기 위한 새로운 흥미로운 기능을 소개합니다. QR 오류 수정 수준을 설정할 수 있어 QR 코드의 크기와 가독성 간의 균형을 맞출 수 있습니다.

using IronBarCode;
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
using IronBarCode;
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
$vbLabelText   $csharpLabel

오류 수정은 실생활에서 QR 코드를 얼마나 쉽게 읽을 수 있는지를 정의할 수 있게 합니다. 오류 수정 수준이 높아지면 픽셀이 많아져 더 큰 QR 코드가 되고 복잡성이 증가합니다. 아래 이미지에서 QR 코드 파일이 표시되는 것을 볼 수 있습니다.

A Comparison between IronBarcode and ZXing.NET, Figure 5: 지원되는 바코드 형식

QR 코드 이미지

우리는 먼저 IronBarCode.BarcodeWriterEncoding 열거형에서 바코드의 값과 바코드 형식을 지정합니다. 그 다음, 이미지, System.Drawing.Image, 또는 Bitmap 코드 객체로 저장할 수 있습니다.

using IronBarCode;
using System.Diagnostics;

// Generate a simple BarCode image and save as PNG using the following namespaces
GeneratedBarcode MyBarCode = IronBarCode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");

// This line opens the image in your default image viewer
Process.Start("MyBarCode.png");
using IronBarCode;
using System.Diagnostics;

// Generate a simple BarCode image and save as PNG using the following namespaces
GeneratedBarcode MyBarCode = IronBarCode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");

// This line opens the image in your default image viewer
Process.Start("MyBarCode.png");
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 6: C# 예제에서 바코드 이미지 생성하기

C# 예제에서 바코드 이미지 생성하기

IronBarcode는 QR 코드를 스타일링할 수도 있으며, 이미지의 정확한 중심에 로고 그래픽을 배치하고 격자에 고정할 수 있습니다. 특정 브랜드나 그래픽 정체성에 맞게 색상을 조정할 수도 있습니다.

테스트를 위해, 아래 코드 샘플에서 로고를 생성하고 QRCodeWriter.CreateQRCodeWithLogo 메서드를 사용하는 것이 얼마나 간단한지 확인하십시오.

using IronBarCode;

// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
using IronBarCode;

// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 7: 로고 이미지와 함께 QR 코드 생성하기

로고 이미지와 함께 QR 코드 생성하기

마지막으로, 생성된 QR 코드를 PDF 파일로 저장합니다. 귀하의 편의를 위해, 마지막 코드 줄은 QR 코드를 HTML 파일로 저장합니다.

using IronBarCode;

// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);

// Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");

// Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
using IronBarCode;

// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);

// Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");

// Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
$vbLabelText   $csharpLabel

아래는 단 한 줄의 코드로 바코드를 생성, 스타일링 및 내보내는 방법을 보여 줍니다.

IronBarcode에는 System.Linq과 유사한 유창한 API가 포함되어 있습니다. 우리는 바코드를 생성하고, 여백을 설정하고, 메소드 호출을 연결하여 한 줄로 비트맵으로 내보냅니다. 이는 매우 유용할 수 있으며 코드를 읽기 쉽게 만듭니다.

using IronBarCode;
using System.Drawing;

// Fluent API for Barcode image generation
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarCode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417)
    .ResizeTo(300, 200)
    .SetMargins(100)
    .ToBitmap();
using IronBarCode;
using System.Drawing;

// Fluent API for Barcode image generation
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarCode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417)
    .ResizeTo(300, 200)
    .SetMargins(100)
    .ToBitmap();
$vbLabelText   $csharpLabel

결과적으로, PDF417 바코드의 System.Drawing.Image가 아래와 같이 나타납니다:

A Comparison between IronBarcode and ZXing.NET, Figure 8: C#에서 간단하고 유창한 PDF417 바코드 생성

C#에서 간단하고 유창한 PDF417 바코드 생성

QR 코드 파일 읽기

IronBarcode를 사용하여 QR 코드 읽기

바코드 또는 QR 코드를 읽는 것은 .NET 바코드 리더와 함께 IronBarcode 클래스 라이브러리를 사용할 때 간단합니다. 첫 번째 예제에서는 한 줄의 코드로 바코드를 읽는 방법을 볼 수 있습니다.

A Comparison between IronBarcode and ZXing.NET, Figure 9: C#에서 스캔할 Code128 바코드 이미지

C#에서 스캔할 Code128 바코드 이미지

우리는 바코드의 값, 이미지, 인코딩 유형 및 바이너리 데이터(있는 경우)를 얻은 후 콘솔에 출력할 수 있습니다.

using IronBarCode;
using System;

// Read a barcode or QR code from an image
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result != null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
    Console.WriteLine("GetStarted was a success.  Read Value: " + Result.Text);
}
using IronBarCode;
using System;

// Read a barcode or QR code from an image
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result != null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
    Console.WriteLine("GetStarted was a success.  Read Value: " + Result.Text);
}
$vbLabelText   $csharpLabel

PDF 내부 바코드 읽기

스캔된 PDF 문서를 읽고 몇 줄의 코드로 모든 1차원 바코드를 찾을 것입니다.

보시다시피, 단일 문서에서 단일 바코드를 읽는 것과 매우 유사합니다. 이제 바코드가 발견된 페이지 번호를 알고 있습니다.

using IronBarCode;
using System;
using System.Drawing;

// Multiple barcodes may be scanned up from a single document or image. A PDF document may also be used as the input image
PagedBarcodeResult[] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");

// Work with the results
foreach (var PageResult in PDFResults)
{
    string Value = PageResult.Value;
    int PageNum = PageResult.PageNumber;
    System.Drawing.Bitmap Img = PageResult.BarcodeImage;
    BarcodeEncoding BarcodeType = PageResult.BarcodeType;
    byte[] Binary = PageResult.BinaryValue;
    Console.WriteLine(PageResult.Value + " on page " + PageNum);
}
using IronBarCode;
using System;
using System.Drawing;

// Multiple barcodes may be scanned up from a single document or image. A PDF document may also be used as the input image
PagedBarcodeResult[] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");

// Work with the results
foreach (var PageResult in PDFResults)
{
    string Value = PageResult.Value;
    int PageNum = PageResult.PageNumber;
    System.Drawing.Bitmap Img = PageResult.BarcodeImage;
    BarcodeEncoding BarcodeType = PageResult.BarcodeType;
    byte[] Binary = PageResult.BinaryValue;
    Console.WriteLine(PageResult.Value + " on page " + PageNum);
}
$vbLabelText   $csharpLabel

PDF의 모든 비트맵 바코드를 포함한 결과 데이터를 받게 됩니다.

A Comparison between IronBarcode and ZXing.NET, Figure 10: PDF 결과 내부 바코드 읽기

PDF 결과 내부 바코드 읽기

GIF 및 TIFF에서 바코드 읽기

using IronBarCode;
using System;

// Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult[] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
    // Process each page result
}
using IronBarCode;
using System;

// Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult[] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
    // Process each page result
}
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 11: 멀티 프레임 TIFF 이미지에서 바코드 읽기

멀티 프레임 TIFF 이미지에서 바코드 읽기

다음 예제는 스캔된 PDF에서 QR 코드 및 PDF-417 바코드를 읽는 방법을 보여줍니다. 적절한 수준의 바코드 회전 수정 및 바코드 이미지 수정을 설정하여 성능에 크게 영향을 미치지 않으면서 문서를 가볍게 정리했습니다.

using IronBarCode;
using System;

// PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);

// Work with the results
foreach (var PageResult in ScanResults)
{
    string Value = PageResult.Value;
    //...
}
using IronBarCode;
using System;

// PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);

// Work with the results
foreach (var PageResult in ScanResults)
{
    string Value = PageResult.Value;
    //...
}
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 12: 스캔된 PDF 문서에서 바코드 읽기

스캔된 PDF 문서에서 바코드 읽기

비트맵 이미지에서 손상된 QR 코드 읽기

아래 예제는 이 C# 바코드 라이브러리가 손상된 바코드 썸네일도 읽을 수 있음을 보여줍니다.

바코드 썸네일 크기의 수정은 자동으로 수행됩니다. C#의 IronBarcode는 파일을 읽을 수 있게 만듭니다.

리더 메서드는 정당한 바코드가 되기에는 너무 작은 바코드 이미지를 자동으로 감지하고 확장합니다. 썸네일 작업과 관련된 디지털 노이즈를 제거하여 다시 읽을 수 있게 만듭니다.

using IronBarCode;

// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
using IronBarCode;

// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 13: 자동 바코드 썸네일 크기 수정

자동 바코드 썸네일 크기 수정

불완전한 이미지에서 바코드 읽기

현실 세계의 시나리오에서는 불완전한 이미지에서 바코드를 읽고 싶을 수 있습니다. 그것들은 왜곡된 이미지거나 디지털 노이즈가 있는 사진일 수 있습니다. 이는 대부분의 오픈 소스 .NET 바코드 생성 및 읽기 라이브러리로는 불가능할 것입니다. 반면 IronBarcode는 불완전한 이미지에서 바코드를 읽는 것을 쉽게 만듭니다.

이제 우리는 ReadASingleBarcode 메서드를 살펴볼 것입니다. IronBarcode는 RotationCorrection 매개변수를 사용하여 불완전한 디지털 샘플에서 바코드를 기울임 보정하고 읽으려고 시도합니다.

using IronBarCode;
using System;
using System.Drawing;

// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection   e.g BarcodeReader.BarcodeRotationCorrection.Extreme un-rotates and removes perspective from barcode images.
// * ImageCorrection      e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separates barcodes from background imagery and digital noise.
// * BarcodeEncoding      e.g. BarcodeEncoding.Code128,  Setting a specific Barcode format improves speed and reduces the risk of false positive results

// Example with a photo image
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte[] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);
using IronBarCode;
using System;
using System.Drawing;

// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection   e.g BarcodeReader.BarcodeRotationCorrection.Extreme un-rotates and removes perspective from barcode images.
// * ImageCorrection      e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separates barcodes from background imagery and digital noise.
// * BarcodeEncoding      e.g. BarcodeEncoding.Code128,  Setting a specific Barcode format improves speed and reduces the risk of false positive results

// Example with a photo image
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte[] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 14: 휴대폰 카메라에서 바코드 읽기

휴대폰 카메라에서 바코드 읽기

IronBarcode는 여러 바코드를 동시에 읽을 수도 있습니다. 문서 목록을 생성하여 바코드 리더를 사용해 여러 문서를 읽으면 IronBarcode에서 더 나은 결과를 얻을 수 있습니다. 바코드 스캔 프로세스를 위한 ReadBarcodesMultithreaded 메서드는 여러 스레드와 잠재적으로 CPU의 모든 코어를 사용하여, 바코드를 한 번에 하나씩 읽는 것보다 지수적으로 빠를 수 있습니다.

using IronBarCode;

// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
var ListOfDocuments = new[] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult[] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);

// Work with the results
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
using IronBarCode;

// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
var ListOfDocuments = new[] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult[] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);

// Work with the results
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
$vbLabelText   $csharpLabel

ZXing.NET을 사용한 QR 코드 읽기 및 디코딩

QR 코드 파일을 읽기 위해, 아래와 같이 컨트롤러에 ViewFile 액션 메서드를 추가하십시오.

public ActionResult ViewFile()
{
    List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
    KeyValuePair<string, string> data;

    string[] files = Directory.GetFiles(Server.MapPath("~/qrr"));
    foreach (string file in files)
    {
        // Create a barcode reader instance
        IBarcodeReader reader = new BarcodeReader();

        // Load a bitmap
        var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));

        // Detect and decode the barcode inside the bitmap
        var result = reader.Decode(barcodeBitmap);

        // Do something with the result
        data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
        fileData.Add(data);
    }
    return View(fileData);
}
public ActionResult ViewFile()
{
    List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
    KeyValuePair<string, string> data;

    string[] files = Directory.GetFiles(Server.MapPath("~/qrr"));
    foreach (string file in files)
    {
        // Create a barcode reader instance
        IBarcodeReader reader = new BarcodeReader();

        // Load a bitmap
        var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));

        // Detect and decode the barcode inside the bitmap
        var result = reader.Decode(barcodeBitmap);

        // Do something with the result
        data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
        fileData.Add(data);
    }
    return View(fileData);
}
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 15: QR 코드 읽기 및 디코딩

QR 코드 읽기 및 디코딩

A Comparison between IronBarcode and ZXing.NET, Figure 16: 디코딩된 QR 코드

디코딩된 QR 코드

비트맵 내의 바코드 디코딩

using ZXing;
using System.Drawing;

// Create a barcode reader instance
BarcodeReader reader = new BarcodeReader();

// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile("C:\\sample-barcode-image.png");

// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);

// Do something with the result
if (result != null)
{
    txtDecoderType.Text = result.BarcodeFormat.ToString();
    txtDecoderContent.Text = result.Text;
}
using ZXing;
using System.Drawing;

// Create a barcode reader instance
BarcodeReader reader = new BarcodeReader();

// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile("C:\\sample-barcode-image.png");

// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);

// Do something with the result
if (result != null)
{
    txtDecoderType.Text = result.BarcodeFormat.ToString();
    txtDecoderContent.Text = result.Text;
}
$vbLabelText   $csharpLabel

ZXing 디코더 온라인

ZXing 디코더 온라인은 디코딩을 지원하는 온라인 바코드 및 QR 코드 스캐너입니다. QR 코드 이미지의 PNG 및 다른 포맷을 업로드하면 디코딩을 시작합니다. 유사하게, 어떤 데이터에 대한 QR 코드를 생성할 수 있습니다. 대부분의 경우 그 정보는 QR 코드에 인코딩하고 싶은 URL 또는 텍스트일 것입니다.

ZXing 디코더 웹사이트로 이동하세요.

A Comparison between IronBarcode and ZXing.NET, Figure 17: 디코딩된 QR 코드

ZXing 디코더 웹사이트

A Comparison between IronBarcode and ZXing.NET, Figure 18: 디코딩된 QR 코드

ZXing 디코드 결과

가격 및 라이선스

ZXing.NET 라이브러리는 Apache License 2.0 하에 적절한 출처를 표시하는 무료 상업적 사용을 허용하며, 바코드 읽기 응용 프로그램을 빌드할 수 있는 무료 오픈 소스 라이브러리입니다.

IronBarcode에 대한 개발자 라이선스는 무료로 제공됩니다. IronBarcode는 독특한 가격 책정 방식이 있습니다: Lite 번들은 $liteLicense부터 시작하며 추가 비용이 없습니다. SaaS 및 OEM 항목도 다시 배포될 수 있습니다. 각 라이선스에는 영구 라이선스, 개발/스테이징/프로덕션 유효성, 30일 환불 보장, 1년의 소프트웨어 지원 및 업그레이드(일회성 구매)가 포함됩니다. IronBarcode의 전체 가격 및 라이선스 정보를 보려면 이 페이지를 방문하세요.

왜 IronBarcode를 선택해야 하는가?

IronBarcode는 .NET에서 바코드를 읽고 쓰기 위한 사용이 간편한 API를 포함하는데, 이는 정확성 최적화와 현실 사용 사례에서 낮은 오류율을 제공합니다.

예를 들어, BarcodeWriter 클래스는 UPCA 및 UPCE 바코드의 '체크섬'을 검증하고 수정할 것입니다. 또한 특정 숫자 형식에 입력하기에 너무 짧은 숫자를 '제로 패딩'합니다. 데이터가 지정된 데이터 형식과 호환되지 않는 경우 IronBarcode는 개발자에게 더 적합한 바코드 형식에 대해 알립니다.

IronBarcode는 사진 이미지에서 스캔되거나 읽혔을 때, 즉 그래픽적으로 완벽하지 않고 기계 생성 스크린샷이 아닐 때 바코드를 읽는 데 뛰어납니다.

IronBarcode는 ZXing.NET과 어떻게 다른가?

IronBarcode는 ZXing.NET(Zebra Crossing) 코어에서 빌드되었으며, 개선된 처리 능력을 가지고 있습니다. 사용이 쉬운 API와 ZXing.NET Core 라이브러리와 비교하여 낮은 오류율을 제공하는 것이 특징입니다. 뿐만 아니라, IronBarcode는 일반 ZXing.NET 라이브러리보다 넓은 범위의 바코드 형식을 지원합니다.

IronBarcode는 상업적 사용 플랫폼과 여러 플랫폼에서 동일한 패키지를 사용할 수 있는 가능성을 제공하는 ZXing.NET의 더 개선된 버전입니다. 또한 완전한 기술 지원을 제공하여 필요할 때마다 도움을 받을 수 있습니다.

IronBarcode는 자동 회전, 원근 보정 및 디지털 노이즈 수정 기능을 포함하며 이미지에서 인코딩된 바코드 유형을 감지할 수 있습니다.

결론

결론적으로, IronBarcode는 다양한 바코드 형식을 대상으로 하는 .NET 소프트웨어 라이브러리이며 C# QR 코드 생성기로, 스크린샷, 사진, 스캔, 기타 불완전한 현실 이미지가 어떤 것이든 읽을 수 있습니다.

IronBarcode는 바코드를 생성하고 식별하는 데 가장 효과적인 라이브러리 중 하나입니다. 바코드를 생성하고 식별하는 측면에서는 가장 빠른 라이브러리 중 하나입니다. 라이브러리는 다양한 운영 체제와 호환됩니다. 설계가 간단하고 다양한 바코드 형식을 지원합니다. 또한 다양한 기호, 형식 및 문자를 지원합니다.

ZXing.NET 바코드는 다양한 이미지 형식에서 바코드를 생성하고 인식하는 강력한 라이브러리입니다. 우리는 다양한 형식으로 이미지를 읽고 생성할 수 있습니다. ZXing.NET은 바코드의 모양을 변경하여 높이, 너비, 바코드 텍스트 등을 변경할 수 있도록 해줍니다.

ZXing.NET과 비교하여, IronBarcode 패키지는 신뢰할 수 있는 라이센스 및 지원을 제공합니다. IronBarcode의 비용은 $liteLicense입니다. ZXing이 무료이자 오픈 소스임에도 불구하고, IronBarcode는 포괄적인 상업적 지원과 전문적인 유지를 제공합니다. Iron Barcode 솔루션은 ZXing.NET보다 더 유연할 뿐만 아니라 더 많은 기능도 가지고 있습니다. 따라서 IronBarcode가 ZXing.NET보다 강력한 이점을 가지고 있음을 알 수 있습니다.

바코드를 인식하고 생성하는 처리 시간을 비교할 때, IronBarcode는 ZXing.NET보다 뛰어납니다. IronBarcode는 또한 다른 이미지 형식 및 PDF 문서에서 바코드를 읽을 수 있는 여러 속성을 가지고 있습니다. 또한 바코드 또는 QR 코드 안에 이미지를 포함할 수 있습니다. 이는 다른 라이브러리에서는 제공되지 않습니다.

IronBarcode는 개발 초기 단계에서 무료로 사용할 수 있습니다. 무료 체험판을 받아서 상용 또는 상업적 용도로 사용할 수 있습니다. 개발자의 요구 사항에 따라, IronBarcode는 세 가지 가격 책정 계층을 제공합니다. 자신의 요구 사항을 가장 잘 충족하는 솔루션을 선택할 수 있습니다. 이제 두 가지 Iron Software 제품 가격으로 Iron Software 제품 다섯 개를 얻을 수 있습니다. 추가 정보는 이 웹사이트를 방문하십시오.

ZXing.NET은 해당 소유자의 등록 상표입니다. 이 사이트는 ZXing.NET과 제휴하거나 인정받지 않았고, 후원하지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

자주 묻는 질문

C#에서 QR 코드를 어떻게 생성할 수 있나요?

IronBarcode 의 `BarcodeWriter` 클래스를 사용하면 C#에서 QR 코드를 생성할 수 있습니다. QR 코드 내용을 정의하고 색상 및 크기 등의 옵션을 사용자 지정한 다음 `Write` 메서드를 호출하여 QR 코드를 생성하면 됩니다.

IronBarcode ZXing .NET 보다 더 강력한 이유는 무엇입니까?

IronBarcode 더욱 다양한 바코드 형식을 지원하고, 회전 및 원근 보정과 같은 고급 이미지 처리 기능을 제공하며, 로고와 색상을 사용하여 꾸민 QR 코드를 생성할 수 있는 등 향상된 기능을 제공합니다. 또한 다양한 플랫폼과 호환되며 상업적 지원도 제공합니다.

IronBarcode 사용하면 이미지에 결함이 있는 바코드도 읽을 수 있나요?

네, IronBarcode 회전 보정, 원근 보정 및 디지털 노이즈 감소와 같은 기능을 사용하여 이미지에 결함이 있는 경우에도 바코드를 읽을 수 있으므로 스캔 이미지나 사진 이미지 모두에 효과적입니다.

C#에서 바코드를 읽는 단계는 무엇인가요?

C#에서 바코드를 읽으려면 IronBarcode의 `BarcodeReader` 클래스를 사용하세요. `BarcodeReader.QuicklyReadOneBarcode` 메서드를 사용하여 바코드가 포함된 이미지를 로드하면, 이 메서드는 바코드를 디코딩하고 인식된 경우 바코드 내용을 반환합니다.

IronBarcode 플랫폼 간 호환성을 어떻게 처리하나요?

IronBarcode Windows, macOS, Linux 및 Azure와의 크로스 플랫폼 호환성을 지원하므로 타사 종속성 없이 다양한 .NET 애플리케이션에 바코드 생성 및 읽기 기능을 통합할 수 있습니다.

IronBarcode 에서 QR 코드를 맞춤 설정할 때 사용할 수 있는 옵션은 무엇인가요?

IronBarcode 색상 조정, 브랜딩을 위한 로고 추가, 크기와 가독성의 균형을 맞추기 위한 오류 수정 수준 구성 등을 통해 QR 코드 맞춤 설정을 지원하여 다양한 미적 및 기능적 요구 사항에 맞는 유연성을 제공합니다.

IronBarcode 상업적 용도로 사용하려면 라이선스 비용이 발생하나요?

IronBarcode 상업용 애플리케이션에 적합한 영구 라이선스를 포함하여 다양한 라이선스 옵션을 제공합니다. 이는 무료이지만 상업적 사용에 제한이 있는 ZXing .NET 과는 대조적입니다.

바코드 라이브러리를 사용할 때 흔히 발생하는 문제 해결 시나리오는 무엇인가요?

일반적인 문제로는 이미지 품질 저하, 지원되지 않는 바코드 형식 또는 구성 오류로 인한 바코드 인식 오류 등이 있습니다. IronBarcode의 고급 이미지 처리 기능은 이러한 인식 문제를 완화하는 데 도움이 될 수 있습니다.

바코드 처리를 위해 ZXing .NET 대신 IronBarcode 선택하는 이유는 무엇일까요?

IronBarcode 더욱 강력한 API, 향상된 오류 처리, 광범위한 바코드 형식 지원, 시각적으로 맞춤 설정 가능한 QR 코드 생성 기능 등을 제공하며, 상업용 라이선스와 전문적인 지원이라는 추가적인 이점도 누릴 수 있습니다.

.NET 프로젝트에 IronBarcode 설치하는 방법은 무엇인가요?

Visual Studio의 NuGet 패키지 관리자를 사용하여 ' IronBarcode '를 검색하고 프로젝트에 추가하면 .NET 프로젝트에 IronBarcode 설치할 수 있으며, 이를 통해 손쉽게 통합하고 업데이트할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me