Cómo Configurar una Región de Recorte de Código de Barras en C#

Extracción del QR de AEAT con Región de Recorte para Facturas Españolas en C

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

QR de AEAT en la esquina inferior derecha: El Real Decreto 1007/2023 establece requisitos visuales precisos para las facturas VeriFactu: el código QR de AEAT debe aparecer en la zona inferior derecha del documento. Configurar una región de recorte al 20% inferior derecho de la imagen de la factura reduce el tiempo de procesamiento hasta 5 veces al escanear miles de facturas en lotes para la reconciliación con el SII de la AEAT.

Defina una región de recorte usando IronSoftware.Drawing.Rectangle para limitar el área de escaneo de IronBarcode a regiones específicas de la imagen, mejorando significativamente el rendimiento de lectura de códigos de barras y reduciendo errores al centrarse solo en áreas relevantes.

Una de las características más importantes de IronBarcode es la posibilidad de especificar Regiones de Recorte. Esta característica permite a IronBarcode leer solo códigos de barras o áreas específicas indicadas por el CropRegion en la imagen usando el objeto IronSoftware.Drawing.Rectangle. El uso de esta función no solo reduce los errores de lectura, sino que también mejora el rendimiento de la misma. Esta técnica es especialmente valiosa cuando se trabaja con documentos de varias páginas o imágenes de alta resolución en las que la ubicación de los códigos de barras es predecible.

Al procesar imágenes con varios códigos de barras o fondos complejos, la definición de una región de recorte resulta crucial para optimizar la velocidad de lectura de los códigos de barras barcode. Al limitar el área de escaneado, se pueden conseguir velocidades de procesamiento hasta 5 veces más rápidas que escaneando imágenes enteras, al tiempo que se reducen los falsos positivos de elementos que no son códigos de barras.

Inicio rápido: Definir y aplicar la región de recorte para leer códigos de barras más rápido

Cree un rectángulo de recorte e introdúzcalo en IronBarcode en segundos: sin configuración adicional, sin fricción. Vea lo fácil que es limitar el escaneo a un área específica de la imagen usando BarcodeReaderOptions.

  1. Instala IronBarcode con el Administrador de Paquetes NuGet

    PM > Install-Package BarCode
  2. Copie y ejecute este fragmento de código.

    var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { CropArea = new IronSoftware.Drawing.Rectangle(x: 50, y: 100, width: 300, height: 150) });
  3. Despliegue para probar en su entorno real

    Comienza a usar IronBarcode en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo encontrar las coordenadas y el tamaño de la región de recorte en una imagen?

Hay muchas formas de encontrar las coordenadas de un punto en una imagen. Una forma es cargar la imagen utilizando la aplicación Paint del ordenador. Para obtener la primera coordenada de la Región de Recorte, mueva el cursor al lugar preferido, que será la esquina superior izquierda del Rectangle, y tome la coordenada x, y proporcionada por la aplicación en la parte inferior izquierda de la pantalla. Luego, localice el segundo punto, que será la esquina inferior derecha del Rectangle. Consulte la imagen a continuación para una comprensión más clara.

Para escenarios más avanzados, también puede considerar el uso de software de edición de imágenes como GIMP o Photoshop, que proporcionan coordenadas de píxeles precisas y herramientas de medición. Algunos desarrolladores prefieren utilizar herramientas de búsqueda de coordenadas en línea o crear sencillas utilidades HTML/JavaScript que muestren las coordenadas del ratón al pasar el ratón por encima de una imagen.

Crop region diagram showing rectangular area with corner coordinates (x1,y1) and (x2,y2) and dimension calculations

¿Qué herramientas puedo utilizar para determinar coordenadas?

Los valores de coordenadas pueden luego usarse como propiedades para el objeto Rectangle. El width del objeto puede definirse como x2 - x1, mientras que height puede definirse como y2 - y1. Al trabajar con imágenes de códigos de barras, es importante entender que las coordenadas comienzan en la esquina superior izquierda (0,0) y aumentan a medida que se desplaza hacia la derecha (eje x) y hacia abajo (eje y).

Varios enfoques de determinación de coordenadas incluyen:

  • Herramientas integradas en SO: Windows Paint, macOS Preview
  • Herramientas para desarrolladores de navegadores: Inspeccionar elemento en imágenes basadas en web
  • Software profesional: Adobe Photoshop, GIMP
  • Utilidades personalizadas: aplicaciones sencillas de visualización de coordenadas
  • Características de depuración de IronBarcode: Exportación de imágenes procesadas con superposición de coordenadas

¿Cómo calcular las dimensiones de un rectángulo a partir de coordenadas?

Una vez que tenga sus dos puntos de esquina, calcular las dimensiones es sencillo. El rectángulo requiere cuatro parámetros: coordenada x, coordenada y, anchura y altura. A continuación se explica cómo instanciar correctamente la región de cultivo:

:path=/static-assets/barcode/content-code-examples/how-to/set-crop-region-instantiate-CropRegion.cs
using IronBarCode;

int x1 = 62;
int y1 = 29;
int x2 = 345;
int y2 = 522;

IronSoftware.Drawing.Rectangle crop1 = new IronSoftware.Drawing.Rectangle(x: x1, y: y1, width: x2-x1, height: y2-y1);
Imports IronBarCode

Private x1 As Integer = 62
Private y1 As Integer = 29
Private x2 As Integer = 345
Private y2 As Integer = 522

Private crop1 As New IronSoftware.Drawing.Rectangle(x:= x1, y:= y1, width:= x2-x1, height:= y2-y1)
$vbLabelText   $csharpLabel

Este sistema de coordenadas funciona a la perfección con las funciones de corrección de imágenes de IronBarcode, lo que le permite aplicar filtros sólo a regiones específicas de su imagen.

¿Cómo aplicar CropRegion y leer BarCodes?

Una vez que haya definido el CropRegions donde desea que IronBarcode lea, puede aplicar el objeto dentro de BarcodeReaderOptions como una de las propiedades, junto con otras configuraciones. Esto puede luego usarse como un parámetro en el método BarcodeReader.Read(). El fragmento de código a continuación muestra este proceso:

¿Qué parámetros acepta BarcodeReaderOptions?

La clase BarcodeReaderOptions proporciona un control integral sobre el proceso de lectura de códigos de barras. Más allá de las regiones de cultivo, puede configurar:

  • Optimización de la velocidad: Equilibrio entre precisión y rendimiento mediante configuración de la velocidad
  • Tipos de códigos de barras: especifique los formatos exactos que desea buscar (formatos admitidos)
  • Filtros de imagen: Aplique correcciones para códigos de barras torcidos o dañados
  • Multithreading: Habilitar el procesamiento en paralelo para mejorar el rendimiento
  • Gestión de rotación: Detección automática de códigos de barras girados

¿Cómo puedo procesar varios resultados de códigos de barras de una región recortada?

Al escanear una región recortada que contiene varios códigos de barras, IronBarcode devuelve una colección de resultados. Cada resultado contiene valiosos metadatos, como la ubicación exacta dentro de la región de cultivo, el tipo de código de barras y el valor descodificado. A continuación se explica cómo implementar el procesamiento integral de regiones de cultivo:

:path=/static-assets/barcode/content-code-examples/how-to/set-crop-region-apply-CropRegion.cs
using IronBarCode;
using System;

int x1 = 62;
int y1 = 29;
int x2 = 345;
int y2 = 522;

IronSoftware.Drawing.Rectangle crop1 = new IronSoftware.Drawing.Rectangle(x: x1, y: y1, width: x2 - x1, height: y2 - y1);

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    CropArea = crop1
};

var result = BarcodeReader.Read("sample.png", options);
foreach (var item in result)
{
    Console.WriteLine(item.Value);
}
Imports IronBarCode
Imports System

Private x1 As Integer = 62
Private y1 As Integer = 29
Private x2 As Integer = 345
Private y2 As Integer = 522

Private crop1 As New IronSoftware.Drawing.Rectangle(x:= x1, y:= y1, width:= x2 - x1, height:= y2 - y1)

Private options As New BarcodeReaderOptions() With {.CropArea = crop1}

Private result = BarcodeReader.Read("sample.png", options)
For Each item In result
	Console.WriteLine(item.Value)
Next item
$vbLabelText   $csharpLabel

Del fragmento de código anterior, utilizamos el Rectangle instanciado en el objeto BarcodeReaderOptions como la propiedad CropArea. Luego usamos este objeto BarcodeReaderOptions como un parámetro en el método BarcodeReader.Read() para aplicar el CropArea a la imagen y leer los códigos de barras internos.

Técnicas avanzadas para regiones de cultivo

Para aplicaciones de producción, considere estas estrategias avanzadas:

  1. Regiones de recorte dinámicas: Calcule áreas de recorte basadas en plantillas de documentos o resultados de OCR
  2. Regiones múltiples: Procese varias regiones de recorte en una sola imagen para diseños complejos
  3. Optimización del rendimiento: Combine regiones de cultivo con procesamiento asíncrono para obtener el máximo rendimiento
  4. Manejo de errores: Implementación de estrategias de emergencia cuando los códigos de barras no se encuentran en las regiones esperadas

Al trabajar con documentos PDF, puede aplicar regiones de recorte a páginas específicas, lo que reduce drásticamente el tiempo de procesamiento de archivos de gran tamaño. Esto resulta especialmente útil para facturas, etiquetas de envío o formularios en los que las posiciones de los códigos de barras están estandarizadas.

Bestes prácticas para la definición de regiones de cultivo

Para maximizar la eficacia de las regiones de cultivo:

  • Añadir relleno: Incluya de 10 a 20 píxeles alrededor de las ubicaciones de los códigos de barras previstos para tener en cuenta ligeras variaciones
  • Prueba a fondo: Verifique que las regiones de recorte funcionan en todo el conjunto de documentos
  • Documentar coordenadas: Mantenga una hoja de referencia de las regiones de cultivo comunes para su aplicación
  • Considere el escalado: Tenga en cuenta las diferentes resoluciones de imagen o configuraciones de PPP
  • Supervisar el rendimiento: realizar un seguimiento de los tiempos de procesamiento para validar la eficacia de la región de cultivo

Para las aplicaciones que requieran tolerancia a fallos, implemente un enfoque de dos pasadas: primero escanee la región de recorte y, a continuación, vuelva a escanear la imagen completa si no se encuentran códigos de barras en las regiones esperadas.

Región de recorte para el procesamiento masivo de facturas españolas

El uso de CropArea es especialmente valioso en los sistemas de procesamiento de facturas en España:

Servicio de reconciliación SII: Un servicio que procesa miles de facturas PDF escaneadas para la reconciliación con el SII de la AEAT puede configurar la región de recorte al 20% inferior derecho de cada página. Dado que el Real Decreto 1007/2023 posiciona el QR de AEAT en esa zona, el tiempo de procesamiento se reduce hasta 5 veces respecto al escaneo completo de la imagen:

// Para una factura A4 escaneada a 300 DPI (2480x3508 píxeles)
// El QR de AEAT ocupa el 20% inferior derecho
int imgAncho = 2480;
int imgAlto = 3508;
var regionQRAEAT = new IronSoftware.Drawing.Rectangle(
    x: (int)(imgAncho * 0.7),
    y: (int)(imgAlto * 0.75),
    width: (int)(imgAncho * 0.3),
    height: (int)(imgAlto * 0.25)
);
var opts = new BarcodeReaderOptions { CropArea = regionQRAEAT };
var results = BarcodeReader.Read("factura-verifactu.png", opts);
string urlAEAT = results.FirstOrDefault()?.Value ?? "";
// Para una factura A4 escaneada a 300 DPI (2480x3508 píxeles)
// El QR de AEAT ocupa el 20% inferior derecho
int imgAncho = 2480;
int imgAlto = 3508;
var regionQRAEAT = new IronSoftware.Drawing.Rectangle(
    x: (int)(imgAncho * 0.7),
    y: (int)(imgAlto * 0.75),
    width: (int)(imgAncho * 0.3),
    height: (int)(imgAlto * 0.25)
);
var opts = new BarcodeReaderOptions { CropArea = regionQRAEAT };
var results = BarcodeReader.Read("factura-verifactu.png", opts);
string urlAEAT = results.FirstOrDefault()?.Value ?? "";
Imports IronSoftware.Drawing

' Para una factura A4 escaneada a 300 DPI (2480x3508 píxeles)
' El QR de AEAT ocupa el 20% inferior derecho
Dim imgAncho As Integer = 2480
Dim imgAlto As Integer = 3508
Dim regionQRAEAT As New Rectangle(
    x:=CInt(imgAncho * 0.7),
    y:=CInt(imgAlto * 0.75),
    width:=CInt(imgAncho * 0.3),
    height:=CInt(imgAlto * 0.25)
)
Dim opts As New BarcodeReaderOptions With {.CropArea = regionQRAEAT}
Dim results = BarcodeReader.Read("factura-verifactu.png", opts)
Dim urlAEAT As String = If(results.FirstOrDefault()?.Value, "")
$vbLabelText   $csharpLabel

Tíquets TicketBAI (País Vasco): Los tíquets de Bizkaia, Gipuzkoa y Araba suelen imprimir el QR de TicketBAI en la parte inferior. El mismo patrón de región de recorte aplica para los lectores de tíquets de los sistemas de TPV del País Vasco.

DataMatrix SILICIE: Las etiquetas de medicamentos del sistema SILICIE colocan el DataMatrix en una posición estandarizada según las guías del Ministerio de Sanidad. Configurar la región de recorte según las guías de diseño de SILICIE mejora la precisión y reduce los falsos positivos al leer otros códigos de barras de la etiqueta.

Consejo de rendimiento SII: Para el procesamiento en lotes de facturas conforme a los plazos de cuatro días del SII, combine regiones de recorte con procesamiento paralelo (Parallel.ForEach con MaxParallelThreads) para maximizar el rendimiento en los servidores Linux o los contenedores Docker de la infraestructura fiscal.

Conclusión

La definición de regiones de recorte es una potente técnica para optimizar el rendimiento de la lectura de códigos de barras en sus aplicaciones .NET. Al limitar el área de escaneo a regiones específicas, se pueden lograr mejoras significativas en la velocidad al tiempo que se reducen los falsos positivos. Tanto si procesa imágenes individuales como si realiza operaciones por lotes, las regiones de cultivo ofrecen la precisión y el rendimiento necesarios para los entornos de producción.

Preguntas Frecuentes

¿Qué es una región de cultivo de códigos de barras y por qué debería utilizarla?

Una región de recorte de código de barras es un área específica dentro de una imagen en la que IronBarcode centra sus esfuerzos de escaneado. Al definir una región de recorte utilizando IronSoftware.Drawing.Rectangle, puede lograr velocidades de lectura de códigos de barras hasta 5 veces más rápidas, al tiempo que reduce los errores al limitar el escaneo solo a las áreas relevantes de su imagen.

¿Cómo se define una región de recorte para la lectura de códigos de barras?

Puede definir una región de recorte en IronBarcode creando un objeto IronSoftware.Drawing.Rectangle con coordenadas (x, y) y dimensiones (ancho, alto) específicas, y pasándolo a la propiedad BarcodeReaderOptions.CropArea al llamar al método Read.

¿Qué mejoras de rendimiento puedo esperar del uso de regiones de cultivo?

La función de región de recorte de IronBarcode puede mejorar el rendimiento de la lectura de códigos de barras hasta 5 veces en comparación con el escaneado de imágenes completas. Esto es especialmente beneficioso cuando se trabaja con documentos de varias páginas o imágenes de alta resolución en las que las ubicaciones de los códigos de barras son predecibles.

¿Cómo puedo encontrar las coordenadas correctas de mi región de cultivo?

Puedes encontrar las coordenadas de la región de recorte utilizando programas de edición de imágenes como Microsoft Paint, GIMP o Photoshop. Sólo tiene que abrir la imagen, mover el cursor a la esquina superior izquierda de la región que desee, anotar las coordenadas x,y y, a continuación, buscar las coordenadas de la esquina inferior derecha para determinar la anchura y la altura del rectángulo en IronBarcode.

¿Cuándo es especialmente beneficioso utilizar regiones de cultivo?

Las regiones de recorte en IronBarcode son especialmente valiosas cuando se procesan imágenes con varios códigos de barras, fondos complejos, documentos de varias páginas o imágenes de alta resolución en las que las ubicaciones de los códigos de barras son consistentes y predecibles.

¿Cómo configuro la región de recorte para extraer el QR de AEAT de facturas VeriFactu escaneadas?

El Real Decreto 1007/2023 posiciona el QR de AEAT en la zona inferior derecha de la factura. Configure CropArea al 20-30% inferior derecho de la imagen. Para una factura A4 a 300 DPI (2480x3508 px), use new Rectangle(x:1736, y:2631, width:744, height:877). Esto reduce el tiempo de escaneo hasta 5 veces en servicios de reconciliación SII.

¿Funciona la región de recorte con el QR de TicketBAI para tíquets del País Vasco?

Sí. Los tíquets de Bizkaia, Gipuzkoa y Araba imprimen el QR de TicketBAI en la parte inferior del recibo. Configurar CropArea al 30% inferior del tíquet mejora la velocidad de extracción del hash de verificación TicketBAI en los sistemas de TPV del País Vasco.

¿Cómo puede IronBarcode ayudar a mejorar la eficiencia de los procesos de negocio?

IronBarcode mejora la eficiencia de los procesos de negocio al permitir la generación y lectura rápida y precisa de códigos de barras, reduciendo errores de entrada de datos manuales y mejorando el seguimiento de inventario y activos.

¿Qué habilidades de programación se necesitan para implementar IronBarcode en un proyecto?

El conocimiento básico de programación en C# es suficiente para implementar IronBarcode en un proyecto, ya que proporciona métodos sencillos y documentación completa para guiar a los desarrolladores.

¿Es IronBarcode adecuado para tanto proyectos pequeños como aplicaciones empresariales grandes?

IronBarcode está diseñado para ser escalable y versátil, haciéndolo adecuado para proyectos pequeños, así como para aplicaciones empresariales grandes que requieren soluciones robustas de códigos de barras.

Hairil Hasyimi Bin Omar
Ingeniero de Software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está refinando su conocimiento de C#, Python y Java, usando ese conocimiento para agregar valor a los miembros del equipo en Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA en Malasia, donde se ...
Leer más
¿Listo para empezar?
Nuget Descargas 2,240,258 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package BarCode
ejecuta una muestra observa cómo tu cadena se convierte en un código de barras.