Cómo leer códigos de barras desde archivos de imagen (JPEG, PNG, GIF, TIFF, SVG, BMP)

Hairil related to Cómo leer códigos de barras desde archivos de imagen (JPEG, PNG, GIF, TIFF, SVG, BMP)
Hairil Hasyimi Bin Omar
19 de marzo, 2023
Actualizado 8 de febrero, 2025
Compartir:
This article was translated from English: Does it need improvement?
Translated
View the article in English


Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

Leer códigos de barras directamente de imágenes

Una de las características clave de IronBarcode es su capacidad para leer códigos de barras de inmediato en múltiples formatos de imagen. Los siguientes formatos de imagen son actualmente compatibles con IronBarcode:

* Gráficos vectoriales escalables (SVG)

* Grupo Conjunto de Expertos en Fotografía (JPEG)

* Gráficos de red portátiles (PNG)

* Formato de intercambio de gráficos (GIF)

* Formato de archivo de imagen etiquetado (TIFF)

* Archivo de imagen de mapa de bits (BMP)

Esto es posible gracias a nuestra biblioteca de código abierto, IronDrawing. Ahora, veamos cómo podemos utilizar IronBarcode para la lectura de códigos de barras:

: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
$vbLabelText   $csharpLabel
QRcodeintro related to Leer códigos de barras directamente de imágenes
Ejemplo de código QR de prueba
Code128intro related to Leer códigos de barras directamente de imágenes
Ejemplo de código de barras de prueba

¿Quieres saber cuáles son los valores de código de barras en las muestras? ¡Pruébalo con el fragmento de código! Para utilizar IronBarcode, lo primero que debe hacer es instalar la librería IronBarcode a través del gestor de paquetes NuGet de Microsoft Visual Studio en su proyecto, tal y como se muestra en la siguiente imagen. Esto le permitirá acceder al método BarcodeReader.Read() de IronBarcode para leer directamente la imagen del código de barras.

Del fragmento de código anterior, podemos ver que IronBarcode ofrece simplicidad al permitir a los usuarios usar solo BarcodeReader.Read() para leer un archivo de imagen que ya ha sido incluido dentro del proyecto especificando la cadena de nombre de archivo o la cadena de ruta del archivo como parámetro para el método. La mejor práctica es utilizar la cadena literal "@" al especificar una ruta de archivo en el método, ya que si no se incluye, los usuarios tendrían que añadir varios caracteres de escape "\" en la cadena de ruta del archivo.

Adjunta el método Values() al final de la llamada al método BarcodeReader.Read() para obtener el valor del código de barras como un objeto System.String [].

Para obtener el resultado en la consola, puedes utilizar el bucle foreach para iterar sobre los valores almacenados en el array string [], y dentro del bloque del bucle, llamar al método Console.WriteLine() con la variable iteradora como parámetro.

Este método no solo es capaz de leer formatos de código de barras unidimensionales (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE), también es capaz de leer formatos de código de barras bidimensionales (Aztec, DataMatrix, QRCode) en varios formatos de imagen.

Configuración de las opciones del lector de códigos de barras

¿Siente que la lectura de códigos de barras es demasiado lenta? ¿Código de barras demasiado pequeño en la imagen y IronBarcode no puede leerlo? ¿Quieres leer sólo determinadas zonas de una imagen? ¿Desea leer sólo determinados tipos de códigos de barras en una imagen con mezclas de códigos de barras? ¿Quiere mejorar su rendimiento general en lectura? ¡No te preocupes más!

BarcodeReaderOptions permite a los usuarios modificar o ajustar el comportamiento del lector de códigos de barras para que pueda abordar todos los problemas mencionados anteriormente. Veamos y discutamos en detalle todas las propiedades ajustables disponibles en BarcodeReaderOptions una por una:

Área de cultivo

CropArea es una propiedad de tipo IronSoftware.Drawing.CropRectangle disponible en BarcodeReaderOptions que permite a los usuarios especificar el área en una imagen que el usuario desea que IronBarcode lea. Esto ayudará a mejorar el rendimiento de la lectura, ya que el lector de códigos de barras no necesita escanear toda la imagen en busca de códigos de barras, así como a mejorar la precisión de la lectura, ya que se ha especificado el área de lectura.

Para establecer la propiedad CropArea, simplemente instancie un nuevo objeto de tipo Rectangle y especifique las coordenadas del rectángulo, el ancho y la longitud del rectángulo como argumentos. La unidad de medida aceptada son los píxeles (px). CropArea = new IronSoftware.Drawing.Rectangle(x, y, width, height)

EsperarTiposDeCódigo

Por defecto, todos los códigos de barras soportados en IronBarcode serán escaneados en una imagen. Sin embargo, si el usuario sabe qué tipo de códigos de barras están disponibles o desea leer en una imagen, configurar esta propiedad para leer sólo un determinado tipo de código de barras aumentará enormemente el rendimiento y la precisión de la lectura, ya que el lector de códigos de barras no necesita iterar a través de colecciones de códigos de barras para interpretar y leer un código de barras.

Para utilizar esta propiedad, simplemente configure el ExpectBarcodeTypes en uno de los campos del enumerado BarcodeEncoding. Conozcamos todos los tipos de códigos de barras soportados por IronBarcode y veamos un ejemplo de código de barras de cada tipo.

  • AllOneDimensional : Tipos lineales de código de barras. Esto incluye códigos de barras Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE.

  • AllTwoDimensional: Esto incluye códigos de barras de tipo Matriz, Cuadrícula y Apilados. Los tipos de códigos de barras que se encuentran dentro de los códigos de barras bidimensionales son Aztec, DataMatrix y QRCode.

  • Aztec : Formato de código de barras 2D Aztec. El código Aztec es un tipo de código de barras 2D inventado por Andrew Longacre, Jr. y Robert Hussey en 1995. Nombrado así por el parecido del patrón central de localización con una pirámide azteca, el código Aztec tiene el potencial de usar menos espacio que otros códigos de barras matriciales porque no requiere una "zona de silencio" blanca alrededor. A continuación se muestra un ejemplo de un código de barras Aztec.
  • Muestra de código de barras Aztec
    Código de barras azteca
  • Codabar: Codabar es una simbología de código de barras lineal desarrollada en 1972 por Pitney Bowes Corp. Codabar codifica sólo datos numéricos (dígitos). A continuación se muestra un ejemplo de código de barras Codabar
  • Ejemplo de código de barras Codabar
    Código de barras Codabar
  • Code128: Code 128 es una simbología de código de barras lineal de alta densidad definida en ISO/IEC 15417:2007. Se utiliza para códigos de barras alfanuméricos o solo numéricos. A continuación, se muestra un ejemplo de código de barras Code128.
  • Muestra de código de barras Code128
    Código de barras Code128
  • Code39: Code 39 es una simbología de código de barras discreta y de longitud variable. La especificación de Code 39 define 43 caracteres, que consisten en letras mayúsculas (de la A a la Z). A continuación, se muestra un ejemplo de un código de barras Code39.
  • Muestra de código de barras Code39
    Código de barras Code39
  • Code93: Formato de código de barras 1D Code 93. Code 93 es una simbología de código de barras diseñada en 1982 por Intermec para proporcionar una mayor densidad y una mejora en la seguridad de los datos en comparación con Code 39. Code 93 admite la codificación de solo los siguientes caracteres 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 - . $ / + % ESPACIO. A continuación se muestra un ejemplo de un código de barras Code93
  • Muestra de código de barras Code93
    Código de barras Code93
  • DataMatrix: Un Data Matrix es un código de barras bidimensional que consiste en "células" o módulos blancos y negros dispuestos en un patrón cuadrado o rectangular, también conocido como matriz. La información a codificar puede ser texto o datos numéricos. El tamaño usual de los datos es desde unos pocos bytes hasta 1556 bytes. A continuación se muestra un ejemplo de un código de barras DataMatrix.
  • Muestra de código de barras DataMatrix
    Código de barras DataMatrix
  • EAN13: El Número de Artículo Internacional (también conocido como Número de Artículo Europeo o EAN) es un estándar que describe una simbología de código de barras y un sistema de numeración usado en el comercio global para identificar un tipo específico de producto minorista, en una configuración de empaque específica, de un fabricante específico. EAN-13 puede solo codificar contenido numérico (dígitos) de una longitud de 12 o 13 dígitos. Los códigos de barras más cortos tendrán ceros (000) añadidos al comienzo del número automáticamente. A continuación, se muestra un ejemplo de código de barras EAN13
  • Ejemplo de código de barras EAN13
    Código de barras EAN13
  • EAN8 : Un EAN-8 es un código de barras de simbología EAN/UPC y se deriva del código más largo conocido como Número de Artículo Internacional (EAN-13). EAN-8 puede codificar solamente contenido numérico (dígitos) de una longitud de 7 u 8 dígitos. Los códigos de barras más cortos tendrán ceros (000) añadidos al principio del número automáticamente. A continuación se muestra un ejemplo de código de barras EAN8.
  • Ejemplo de código de barras EAN8
    Código de barras EAN8
  • IntelligentMail: Formato de código de barras 2D de Intelligent Mail. El Código de Barras Intelligent Mail (también conocido como "Código de Barras IM" o "Códigos de Barras USPS OneCode" o "IMB") es un código de barras de 65 barras para su uso en correo en los Estados Unidos. El término "Intelligent Mail" se refiere a los servicios ofrecidos por el Servicio Postal de los Estados Unidos para la entrega de correo doméstico. El código de barras IM está diseñado para proporcionar mayor información y funcionalidad que sus predecesores POSTNET y PLANET. Tenga en cuenta que IronBarcode solo PUEDE LEER este tipo de código de barras. A continuación se muestra un ejemplo de un código de barras de este tipo.
  • Muestra de código de barras IntelligentMail
    Código de barras IntelligentMail
  • ITF: ITF-14 es la implementación de GS1 de un código de barras Interleaved 2 of 5 (ITF) para codificar un Número Global de Artículo Comercial. Los símbolos ITF-14 se utilizan generalmente en los niveles de embalaje de un producto, como una caja de 24 latas de sopa. El ITF-14 siempre codificará 14 dígitos. ITF codifica solo datos numéricos. Si el número de dígitos no es par, se agregará automáticamente un '0' al principio. A continuación se muestra un ejemplo de código de barras ITF
  • Muestra de código de barras ITF
    Código de barras ITF
  • MaxiCode: Formato de código de barras 2D MaxiCode. MaxiCode es un sistema de símbolos legible por máquina de dominio público, creado y utilizado originalmente por United Parcel Service. Adecuado para rastrear y gestionar el envío de paquetes, se asemeja a un código de barras, pero utiliza puntos dispuestos en una cuadrícula hexagonal. Tenga en cuenta que IronBarcode puede solo LEER este tipo de código de barras. A continuación, se muestra un ejemplo de código de barras de este tipo.
  • Ejemplo de código de barras MaxiCode
    Código de barras MaxiCode
  • MSI: MSI es una simbología de código de barras desarrollada por la MSI Data Corporation, basada en la simbología original del Código Plessey. Este tipo de código de barras solo acepta valores numéricos. A continuación, se muestra un ejemplo de un código de barras tipo MSI.
  • Ejemplo de código de barras MSI
    Código de barras MSI
  • PDF417: PDF417 es un formato de símbolo de código de barras lineal apilado utilizado en una variedad de aplicaciones, principalmente transporte, tarjetas de identificación y gestión de inventario. PDF significa Archivo de Datos Portátil. El 417 indica que cada patrón en el código consta de 4 barras y espacios, y que cada patrón tiene 17 unidades de longitud. La simbología PDF417 fue inventada por el Dr. Ynjiun P. Wang en Symbol Technologies en 1991. (Wang 1993) Es la norma ISO 15438. A continuación se muestra un ejemplo de código de barras PDF417
  • Ejemplo de código de barras PDF417
    Código de barras PDF417
  • Plessey: El código Plessey es una simbología de código de barras lineal 1D basada en la modulación por anchura de pulsos, desarrollada en 1971 por The Plessey Company PLC, una empresa británica. Este tipo de código de barras sólo acepta valores numéricos. A continuación se muestra un ejemplo de un código de barras Plessey
  • Muestra de código de barras Plessey
    Código de barras Plessey
  • Código QR: El código QR (abreviado de Quick Response Code) es la marca registrada de un tipo de código de barras matricial (o código de barras bidimensional) diseñado por primera vez en 1994 para la industria automotriz en Japón. Un código de barras es una etiqueta óptica legible por máquina que contiene información sobre el elemento al que está adjunto. Un código QR utiliza cuatro modos de codificación estandarizados (numérico, alfanumérico, byte/binario y kanji) para almacenar datos de manera eficiente; también se pueden usar extensiones. A continuación, se muestra un ejemplo de un código de barras QR.
  • Muestra de código de barras QRCode
    Código de barras QRCode
  • Rss14: Formato de código de barras Reduce Space Symbology 14. Puede representar un código de barras 1D o un código de barras apilado 2D. El código de barras RSS 14 (Reduce Space Symbology) codifica la identificación completa del artículo EAN.UCC de 14 dígitos en un símbolo que puede ser escaneado de forma omnidireccional por escáneres láser de punto de venta configurados adecuadamente. Es el tipo de código de barras más reciente para la identificación en espacios limitados de EAN International y del Uniform Code Council, Inc. Los códigos de barras RSS han sido identificados para dirigirse a la industria de abarrotes y en el sector de la salud, donde los artículos son demasiado pequeños para permitir otras simbologías de códigos de barras. Tenga en cuenta que IronBarcode solo puede LEER este tipo de código de barras. A continuación se muestra un ejemplo de código de barras Rss14
  • Muestra de código de barras 1D Rss14
    1 Dimensión Rss14 Código de barras
    Ejemplo de código de barras 2D Rss14
    Código de barras bidimensional Rss14
  • UPCA : El Código Universal de Producto (UPC) es una simbología de código de barras muy utilizada en Estados Unidos, Canadá, Reino Unido, Australia, Nueva Zelanda, en Europa y otros países para el seguimiento de artículos comerciales en tiendas. UPC (se refiere técnicamente a UPC-A) consta de 12 dígitos numéricos, que se asignan de manera única a cada artículo comercial. Junto con el código de barras EAN relacionado, el UPC es el código de barras que se utiliza principalmente para el escaneo de artículos comerciales en el punto de venta, según las especificaciones de GS1. UPCA solo puede codificar contenido numérico (dígitos) de 12 o 13 dígitos de longitud. Los códigos de barras más cortos tendrán ceros (000) añadidos al inicio del número automáticamente. A continuación se muestra un ejemplo de un código de barras UPCA
  • Muestra de código de barras UPCA
    Código de barras UPCA
  • UPCE: Para permitir el uso de códigos de barras UPC en paquetes más pequeños, donde no cabe un código de barras completo de 12 dígitos, se desarrolló una versión 'suprimida en ceros' de UPC, llamada UPC-E, en la que se suprime el dígito del sistema numérico, todos los ceros al final en el código del fabricante y todos los ceros al comienzo en el código del producto. UPCE sólo puede codificar contenido numérico (dígitos) de longitud de 7 u 8 dígitos. A continuación se presenta un ejemplo de código de barras UPCE
  • Ejemplo de código de barras UPCE
    Código de barras UPCE

ExpectMultipleBarcodes

IronBarcode escaneará por defecto todos los códigos de barras disponibles en una imagen, lo que incluye escanear todo el archivo de imagen y añadir los valores de los códigos de barras leídos a la matriz de cadenas. Sin embargo, si los usuarios no desean leer múltiples códigos de barras en un archivo de imagen, pueden establecer esta propiedad en false, lo que hará que el lector de códigos de barras deje de escanear una vez que se haya encontrado un valor de código de barras. Esto mejorará de nuevo el rendimiento y la velocidad de lectura de IronBarcode.

Filtros de imagen

Una de las propiedades que se pueden añadir en BarcodeReaderOptions es una colección de filtros de imagen. Los filtros de imagen son importantes para preprocesar la imagen en bruto introducida en Iron Barcode. Para aplicar filtros de imagen dentro de BarcodeReaderOptions, los usuarios deben primero iniciar y especificar la colección ImageFilter que se va a utilizar.

MaxParallelThreads

IronBarcode también permite a los usuarios habilitar y ajustar la cantidad de hilos paralelos de ejecución, lo que a su vez mejorará la velocidad y la eficiencia del proceso. Hilos paralelos significa la ejecución de múltiples hilos simultáneamente en diferentes núcleos de procesadores. La cantidad predeterminada para la propiedad MaxParallelThread en IronBarcode es 4. Los usuarios pueden ajustarla según las capacidades y la cantidad de recursos que tengan sus máquinas.

Multihilo

Esta propiedad permite a IronBarcode leer varias imágenes en paralelo. El valor predeterminado para Multihreaded es True, por lo tanto, los múltiples hilos serán gestionados automáticamente para mejorar el rendimiento en tareas de lectura de códigos de barras por lotes.

EliminarFalsoPositivo

Esta propiedad elimina las lecturas de códigos de barras falsos positivos. Las lecturas falsas positivas de códigos de barras significan simplemente una lectura falsa de los valores del código de barras, pero identificada como válida. Esto puede ocurrir debido a errores en el proceso de secuenciación, como errores de secuenciación, o errores en el etiquetado del código de barras o en el proceso de preparación. Por lo tanto, establecer RemoveFalsePositive como verdadero eliminará las lecturas de códigos de barras falsos positivos, mejorando así la precisión de la lectura de códigos de barras. Sin embargo, si los usuarios priorizan el rendimiento a costa de la precisión, establecer esta propiedad en False ayudaría. El valor predeterminado para esta propiedad es True.

ScanMode

Defina cómo IronBarcode escanea y detecta códigos de barras en una imagen.

  • Auto: Lee códigos de barras con procesamiento de imágenes automático y las opciones de lector más óptimas configuradas. Recomendado para obtener los mejores resultados y rendimiento.
  • OnlyDetectionModel: Escanea la imagen en busca de códigos de barras y devuelve sus posiciones como un arreglo de IronSoftware.Drawing.PointF. Este modo no lee los códigos de barras detectados; solo devuelve las posiciones de cada código de barras.
  • MachineLearningScan: Escanea la imagen en busca de códigos de barras utilizando detección por aprendizaje automático y los lee.
  • OnlyBasicScan: Lee códigos de barras sin detección de aprendizaje automático, preprocesamiento automático de imágenes o configuración de opciones del lector.

    Esta opción se puede usar solo con IronBarCode.Slim.

Velocidad de lectura

Como sugiere el nombre, la propiedad Speed permite a los usuarios optimizar aún más el rendimiento del lector de IronBarcode. Similar al atributo RemoveFalsePositive, ajustar esta propiedad mejora el rendimiento a costa de la precisión. Acepta la enumeración ReadingSpeed, que tiene 4 niveles como se muestra a continuación:

  • Más rápido: Establecer la propiedad Speed a este valor permite la lectura de códigos de barras más rápida, pero reduce la precisión. El proceso omite el preprocesamiento de imágenes, lo que a menudo resulta en resultados de códigos de barras vacíos. Utilice esta configuración solo si la imagen de entrada es nítida y clara.
  • Balanceado: Esta configuración es recomendada para la propiedad Speed. Establece un equilibrio entre la precisión y el rendimiento de lectura intentando aplicar el Procesado de luz a la imagen para aclarar el área del código de barras y hacer que destaque para que el lector de códigos de barras lo detecte. La mayoría de las veces, esta configuración es suficiente para que IronBarcode lea una imagen de código de barras y produzca una salida precisa.
  • Detallado: En caso de que el uso de la configuración ReadingSpeed.Balanced no sea exitoso en producir el valor del código de barras a partir de la lectura, los usuarios pueden optar por usar ReadingSpeed.Detailed. IronBarcode realizará un Procesamiento Medio en la imagen para aclarar más el área del código de barras y que el lector de códigos de barras pueda detectarlo. Este ajuste es muy útil para detectar una imagen de código de barras pequeña o poco nítida.
  • ExtremeDetail: Esta configuración es la menos recomendada debido a su proceso intensivo en CPU, mediante el cual se realizará un Procesamiento Pesado en la imagen del código de barras para que el lector pueda leer los códigos de barras. Esto reducirá en gran medida el rendimiento de lectura de IronBarcode. Se aconseja a los usuarios que realicen el preprocesamiento de la imagen/apliquen filtros a la imagen antes de optar por esta configuración.

    Sin embargo, tenga en cuenta que esta configuración consume muchos recursos de CPU y puede afectar el rendimiento de lectura. Se recomienda a los usuarios experimentar con otros ajustes antes de utilizar esta configuración. La combinación de ReadingSpeed.Detailed con RemoveFalsePositive establecido en "True" imprimirá una advertencia en la consola. Sin embargo, no afectará a la lectura y puede ignorarse. -->

    Sin embargo, tenga en cuenta que esta configuración consume muchos recursos de CPU y puede afectar el rendimiento de lectura. Se recomienda a los usuarios experimentar con otros ajustes antes de utilizar esta configuración. La combinación de ReadingSpeed.ExtremeDetail con RemoveFalsePositive establecido en "True" imprimirá una advertencia en la consola. Sin embargo, no afectará a la lectura y puede ignorarse. -->

UseCode39ExtendedMode

Este ajuste permite leer e interpretar códigos de barras de tipo Code39 con el modo ampliado, por lo que se aplicará el juego de caracteres ASCII completo. Configurar UseCode39ExtendedMode a True permitirá una lectura más precisa de los códigos de barras Code39.

Lectura avanzada de códigos de barras a partir de imágenes

Ahora que hemos aprendido todas las opciones que pueden ser ajustadas por los usuarios, ya sea para aumentar el rendimiento o la precisión, veamos cómo podemos aplicarlo en nuestro código. El siguiente fragmento de código lo demuestra.

: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
$vbLabelText   $csharpLabel

A partir del fragmento de código, podemos ver que para usar BarcodeReaderOptions primero tenemos que inicializarlo, luego podemos determinar y ajustar las propiedades de BarcodeReaderOptions de acuerdo con las propiedades mencionadas anteriormente. El BarcodeReaderOptions inicializado se puede usar más tarde como un argumento en el método BarcodeReader.Read() junto con el archivo de imagen. Esto aplicará todas las configuraciones en BarcodeReaderOptions al leer el código de barras de la imagen.

Hairil related to Lectura avanzada de códigos de barras a partir de imágenes
Ingeniero de software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está perfeccionando sus conocimientos de C#, Python y Java, y los utiliza para añadir valor a los miembros del equipo de Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA de Malasia, donde se licenció en Ingeniería Química y de Procesos.