Comment lire les codes-barres à partir de fichiers image (JPEG, PNG, GIF, TIFF, SVG, BMP)
Comment lire des codes-barres à partir d'images en C#

- Téléchargez la bibliothèque C# pour lire les codes-barres à partir d'une image
- Utilisez la méthode
Read
pour lire les valeurs de code-barres à partir de divers formats d'image - Utilisez la classe BarcodeReaderOptions pour configurer les paramètres de lecture
- Spécifiez les régions des codes-barres dans l'image avec la propriété CropArea
- Spécifiez les types de code-barres à lire en définissant la propriété ExpectBarcodeTypes
Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit.
Lire les codes-barres directement à partir des images
L'une des caractéristiques clés d'IronBarcode est sa capacité à lire les codes-barres prêts à l'emploi dans plusieurs formats d'image. Les formats d'image suivants sont actuellement pris en charge par IronBarcode :
* Graphiques vectoriels évolutifs (SVG)
* Groupe mixte d'experts en photographie (JPEG)
* Graphique en réseau portable (PNG)
* Format d'échange graphique (GIF)
* Format de fichier image étiqueté (TIFF)
* Fichier image bitmap (BMP)
Ceci est rendu possible grâce à l'aide de notre bibliothèque open source, IronDrawing. Voyons maintenant comment nous pouvons réellement utiliser IronBarcode pour la lecture de codes-barres :
: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());
}


Vous voulez savoir quelles sont les valeurs des codes-barres dans les échantillons ? Essayez-le avec l'extrait de code !
Pour utiliser IronBarcode, la première chose à faire est d'installer la bibliothèque IronBarcode via le gestionnaire de paquets NuGet de Microsoft Visual Studio dans votre projet, comme indiqué dans l'image ci-dessous. Cela vous permettra d'accéder à la méthode IronBarcode BarcodeReader.Read()
pour lire directement l'image de code-barres.
À partir de l'extrait de code ci-dessus, nous pouvons voir qu'IronBarcode offre de la simplicité en permettant aux utilisateurs d'utiliser uniquement BarcodeReader.Read()
pour lire un fichier image qui a déjà été inclus dans le projet en spécifiant la chaîne de nom de fichier, OU la chaîne de chemin de fichier comme paramètre de la méthode. La meilleure pratique consiste à utiliser la chaîne littérale verbatim "@" lors de la spécification d'un chemin d'accès au fichier dans la méthode. En effet, si l'on ne l'inclut pas, les utilisateurs devront ajouter plusieurs caractères d'échappement "\" dans la chaîne du chemin d'accès au fichier.
Attachez la méthode Values()
à la fin de l'appel de la méthode BarcodeReader.Read()
pour obtenir la valeur du code-barres sous forme d'objet System.String []
.
Pour afficher le résultat dans la console, vous pouvez utiliser une boucle foreach
pour itérer sur les valeurs stockées dans le tableau string []
, et à l'intérieur du bloc de la boucle, appelez la méthode Console.WriteLine()
avec la variable d'itération en tant que paramètre.
Cette méthode ne peut pas seulement lire les formats de codes-barres 1-Dimensionnels (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE), elle est également capable de lire les formats de codes-barres 2-Dimensionnels (Aztec, DataMatrix, QRCode) dans divers formats d'image.
Définition des options du lecteur de codes-barres
La lecture des codes-barres est trop lente ? Le code-barres est trop petit dans l'image et IronBarcode ne peut pas le lire ? Vous souhaitez ne lire que certaines parties d'une image ? Vous souhaitez lire uniquement certains types de codes-barres dans une image contenant des mélanges de codes-barres ? Vous souhaitez améliorer vos performances globales en matière de lecture ? Ne vous inquiétez plus !
BarcodeReaderOptions
permet aux utilisateurs de modifier ou d'ajuster le comportement du lecteur de codes-barres afin qu'il puisse résoudre tous les problèmes mentionnés ci-dessus. Voyons et discutons en détail de toutes les propriétés ajustables disponibles dans BarcodeReaderOptions
une par une :
Superficie des cultures
CropArea
est une propriété de type IronSoftware.Drawing.CropRectangle
disponible dans BarcodeReaderOptions
qui permet aux utilisateurs de spécifier la zone d'une image que l'utilisateur souhaite qu'IronBarcode lise. Cela permettra d'améliorer les performances de lecture, puisque le lecteur de codes-barres ne doit pas parcourir l'ensemble de l'image à la recherche de codes-barres, et d'améliorer la précision de la lecture puisque la zone de lecture a été spécifiée.
Pour définir la propriété CropArea
, il suffit d'instancier un nouvel objet de type Rectangle et de spécifier les coordonnées du rectangle, sa largeur et sa longueur en tant qu'arguments. L'unité de mesure acceptée est le pixel (px).
CropArea = new IronSoftware.Drawing.Rectangle(x, y, largeur, hauteur)
Types de codes-barres attendus
Par défaut, tous les codes-barres pris en charge dans IronBarcode seront scannés dans une image. Cependant, si l'utilisateur sait quels types de codes-barres sont disponibles ou doivent être lus dans une image, le fait de définir cette propriété pour ne lire que certains types de codes-barres augmentera considérablement les performances et la précision de la lecture puisque le lecteur de codes-barres n'a pas besoin d'itérer à travers des collections de codes-barres pour interpréter et lire un code-barres.
Pour utiliser cette propriété, il suffit de définir le ExpectBarcodeTypes
sur l'un des champs de l'énumération BarcodeEncoding
. Découvrons tous les types de codes-barres pris en charge par IronBarcode et examinons un exemple de code-barres de chaque type.
- AllOneDimensional : Types linéaires de code-barres. Cela inclut les codes-barres Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE.
- AllTwoDimensional : Cela inclut les codes-barres en grille, matrice et empilés. Les types de codes-barres qui relèvent des codes-barres 2D sont les codes-barres Aztec, DataMatrix, QRCode.
- Aztec : Format de code-barres 2D Aztec. Le Code Aztec est un type de code-barres 2D inventé par Andrew Longacre, Jr. et Robert Hussey en 1995. Nommé en raison de la ressemblance du motif central de repérage avec une pyramide aztèque, le code Aztec a le potentiel d'utiliser moins d'espace que d'autres codes-barres matriciels car il ne nécessite pas de « zone de silence » blanche entourant. Ci-dessous un exemple de code-barres Aztec
- Codabar : Codabar est une symbologie de code-barres linéaire développée en 1972 par Pitney Bowes Corp. Codabar encode uniquement des données numériques (chiffres). Ci-dessous un exemple de code-barres Codabar :
- Code128 : Code 128 est une symbologie de code-barres linéaire à haute densité définie dans la norme ISO/IEC 15417:2007. Il est utilisé pour des codes-barres alphanumériques ou uniquement numériques. Voici un exemple de code-barres Code128
- Code39 : Le Code 39 est une symbologie de code-barres discrète à longueur variable. La spécification du Code 39 définit 43 caractères, composés de lettres majuscules (A à Z). Ci-dessous un exemple d'un code-barres Code39
- Code93 : Format de code-barres 1D Code 93. Le Code 93 est une symbologie de code-barres conçue en 1982 par Intermec pour fournir une densité plus élevée et une amélioration de la sécurité des données par rapport au Code 39. Le Code 93 prend en charge l'encodage uniquement des caractères ASCII suivants: 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 - . $ / + % ESPACE. Ci-dessous un exemple de code-barres Code93
- DataMatrix : Un Data Matrix est un code-barres bidimensionnel composé de "cellules" ou de modules noirs et blancs disposés dans un motif carré ou rectangulaire, également connu sous le nom de matrice. Les informations à encoder peuvent être des données textuelles ou numériques. La taille habituelle des données varie de quelques octets à 1556 octets. Ci-dessous un exemple de code-barres DataMatrix
- EAN13 : Le Numéro d'Article International (aussi connu sous le nom de Numéro d'Article Européen ou EAN) est une norme décrivant une symbologie de code-barres et un système de numérotation utilisé dans le commerce mondial pour identifier un type de produit de détail spécifique, dans une configuration d'emballage spécifique, d'un fabricant spécifique. EAN-13 peut uniquement encoder un contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Les codes-barres plus courts auront des zéros de fin (000) ajoutés au début du numéro automatiquement. Ci-dessous un exemple de code-barres EAN13
- EAN8 : Un EAN-8 est un code-barres de symbologie EAN/UPC et est dérivé du code plus long appelé Numéro d'Article International (EAN-13). EAN-8 peut seulement encoder un contenu numérique (chiffres) de 7 ou 8 chiffres de longueur. Les codes-barres plus courts auront un zéro (000) ajouté au début du numéro automatiquement. Ci-dessous est un exemple de code-barres EAN8
- IntelligentMail : format de code-barres 2D Intelligent Mail. Le code-barres Intelligent Mail (également connu sous le nom de "IM Barcode" ou "USPS OneCode Barcodes" ou "IMB") est un code-barres à 65 barres utilisé pour le courrier aux États-Unis. Le terme "Intelligent Mail" fait référence aux services offerts par le service postal des États-Unis pour la livraison de courrier domestique. Le code-barres IM est conçu pour fournir plus d'informations et de fonctionnalités que ses prédécesseurs POSTNET et PLANET. Veuillez noter qu'IronBarcode peut uniquement LIRE ce type de code-barres. Ci-dessous se trouve un exemple de code-barres de ce type
- ITF : ITF-14 est la mise en œuvre GS1 d'un code-barres Interleaved 2 of 5 (ITF) pour encoder un Numéro d'Article Commercial Global. Les symboles ITF-14 sont généralement utilisés sur les niveaux d'emballage d'un produit, comme une boîte de 24 conserves de soupe. L'ITF-14 encodera toujours 14 chiffres. ITF encode uniquement des données numériques. Si le nombre de chiffres n'est pas pair, un '0' sera automatiquement ajouté au début. Ci-dessous un exemple de code-barres ITF
- MaxiCode : format de code-barres 2D MaxiCode. MaxiCode est un système de symboles lisibles par machine et appartenant au domaine public, initialement créé et utilisé par United Parcel Service. Adapté au suivi et à la gestion de l'expédition de colis, il ressemble à un code-barres, mais utilise des points disposés en une grille hexagonale à la place. Veuillez noter qu'IronBarcode peut uniquement LIRE ce type de code-barres. Ci-dessous se trouve un exemple de code-barres de ce type.
- MSI : MSI est une symbologie de code-barres développée par la MSI Data Corporation, basée sur la symbologie originale du code Plessey. Ce type de code-barres n'accepte que des valeurs numériques. Vous trouverez ci-dessous un exemple de code-barres de type MSI.
- PDF417 : PDF417 est un format de symbole de code-barres linéaire empilé utilisé dans une variété d'applications, principalement le transport, les cartes d'identification et la gestion des stocks. PDF signifie Portable Data File. Le 417 indique que chaque motif dans le code se compose de 4 barres et espaces, et que chaque motif mesure 17 unités de longueur. La symbologie PDF417 a été inventée par le Dr. Ynjiun P. Wang chez Symbol Technologies en 1991. (Wang 1993) Il s'agit de la norme ISO 15438. Ci-dessous un exemple de code-barres PDF417
- Plessey : Le code Plessey est une symbologie de code-barres linéaire 1D basée sur la modulation par largeur d'impulsion, développée en 1971 par The Plessey Company PLC, une entreprise britannique. Ce type de code-barres n'accepte que des valeurs numériques. Ci-dessous un exemple d'un code-barres Plessey
- QRCode : Le code QR (abréviation de Quick Response Code) est la marque déposée d'un type de code-barres matriciel (ou code-barres bidimensionnel) conçu pour la première fois en 1994 pour l'industrie automobile au Japon. Un code-barres est une étiquette optique lisible par machine qui contient des informations sur l'élément auquel elle est attachée. Un code QR utilise quatre modes de codage standardisés (numérique, alphanumérique, octet/binaire et kanji) pour stocker efficacement les données ; des extensions peuvent également être utilisées. Ci-dessous un exemple de code-barres QR
- Rss14 : Format de code-barres Reduce Space Symbology 14. Peut représenter un code-barres 1D ou un code-barres empilé 2D. Le code-barres RSS 14 (Reduce Space Symbology) encode l'identification complète de l'article EAN.UCC à 14 chiffres dans un symbole qui peut être scanné de manière omnidirectionnelle par des scanners laser de point de vente configurés de manière adéquate. C'est le dernier type de codes-barres pour l'identification avec contrainte d'espace de l'EAN International et du Uniform Code Council, Inc. Les codes-barres RSS sont conçus pour cibler l'industrie de l'épicerie et le secteur de la santé, où les articles sont trop petits pour permettre d'autres symbologies de code-barres. Veuillez noter qu'IronBarcode peut seulement LIRE ce type de code-barres. Ci-dessous un exemple de code-barres Rss14
- UPCA : Le code universel des produits (UPC) est une symbologie de code-barres largement utilisée aux États-Unis, au Canada, au Royaume-Uni, en Australie, en Nouvelle-Zélande, en Europe et dans d'autres pays pour suivre les articles commerciaux dans les magasins. UPC (se réfère techniquement à UPC-A) se compose de 12 chiffres numériques, qui sont attribués de manière unique à chaque article commercial. Avec le code-barres EAN associé, l'UPC est le code-barres principalement utilisé pour le balayage des articles commerciaux au point de vente, selon les spécifications GS1. UPCA peut seulement encoder du contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Les codes-barres plus courts auront des zéros à la fin (000) préfixés au début du numéro automatiquement. Ci-dessous un exemple d’un code-barres UPCA.
- UPCE : Afin de permettre l'utilisation des codes-barres UPC sur des emballages plus petits, où un code-barres complet de 12 chiffres pourrait ne pas tenir, une version « sans zéro » du UPC a été développée, appelée UPC-E, dans laquelle le chiffre du système de numérotation, tous les zéros de fin dans le code du fabricant, et tous les zéros en début dans le code produit sont supprimés. UPCE peut seulement encoder un contenu numérique (chiffres) d'une longueur de 7 ou 8 chiffres. Voici un exemple de code-barres UPCE :



















Attendre des codes multiples
Par défaut, IronBarcode scanne tous les codes-barres disponibles dans une image, c'est-à-dire qu'il scanne l'ensemble du fichier image et ajoute les valeurs des codes-barres lus dans le tableau de chaînes de caractères. Toutefois, si les utilisateurs ne souhaitent pas lire plusieurs codes-barres dans un fichier image, ils peuvent définir cette propriété sur false, ce qui fera que le lecteur de codes-barres s'arrêtera de scanner dès qu'une valeur de code-barres aura été trouvée. Cela améliorera à nouveau les performances et la vitesse de lecture d'IronBarcode.
Filtres d'images
L'une des propriétés qui peuvent être ajoutées dans BarcodeReaderOptions
est une collection de filtres d'image. Les filtres d'image sont importants pour prétraiter l'image brute envoyée à Iron Barcode. Pour appliquer des filtres d'image dans les BarcodeReaderOptions
, les utilisateurs doivent d'abord initier et spécifier la collection ImageFilter
à utiliser.
MaxParallelThreads
IronBarcode permet également aux utilisateurs d'activer et de régler le nombre d'exécutions parallèles, ce qui améliore la vitesse et l'efficacité du processus. Les threads parallèles signifient l'exécution simultanée de plusieurs threads sur différents cœurs de processeurs. La valeur par défaut pour la propriété MaxParallelThread
dans IronBarcode est 4. Les utilisateurs peuvent les ajuster en fonction des capacités et de la quantité de ressources dont disposent leurs machines.
Multithreaded
Cette propriété permet à IronBarcode de lire plusieurs images en parallèle. La valeur par défaut pour Multihreaded
est True, par conséquent, les multiples threads seront gérés automatiquement pour améliorer les performances des tâches de lecture de codes-barres en lot.
Retirer les faux positifs
Cette propriété permet de supprimer toute lecture de code-barres faussement positive. Les lectures de codes-barres faussement positives désignent simplement une lecture erronée de valeurs de codes-barres, mais identifiées comme valides. Cela peut être dû à des erreurs dans le processus de séquençage, telles que des erreurs de séquençage, ou à des erreurs dans le processus d'étiquetage ou de préparation des codes-barres. Par conséquent, définir RemoveFalsePositive
comme vrai supprimera les lectures de codes-barres faussement positives, améliorant ainsi la précision de la lecture des codes-barres. Cependant, si les utilisateurs privilégient la performance au détriment de la précision, définir cette propriété sur False serait bénéfique. La valeur par défaut de cette propriété est True.
ScanMode
Définir comment IronBarcode numérise et détecte les codes-barres dans une image.
- Auto : Lit les codes-barres avec un prétraitement d'image automatique et les options de lecture les plus optimales configurées. Recommandé pour de meilleurs résultats et performances.
- OnlyDetectionModel : Analyse l'image à la recherche de codes-barres et renvoie leurs positions sous forme de tableau de IronSoftware.Drawing.PointF. Cet mode ne lit pas les codes-barres détectés ; il ne renvoie que les positions de chaque code-barres.
- MachineLearningScan : Analyse l'image pour détecter les codes-barres à l'aide de la détection par apprentissage automatique et les lit.
-
OnlyBasicScan : Lit les codes-barres sans détection par apprentissage automatique, traitement d'image automatique, ou configuration des options du lecteur.
Cette option peut être utilisée uniquement avec IronBarCode.Slim.
Vitesse de lecture
Comme son nom l'indique, la propriété Speed permet aux utilisateurs d'optimiser davantage les performances du lecteur IronBarcode. Similaire à la propriété RemoveFalsePositive, ajuster cette propriété améliore les performances au détriment de la précision. Il accepte l'énumération ReadingSpeed, qui comporte 4 niveaux comme indiqué ci-dessous :
- Plus rapide : Régler la propriété Vitesse sur cette valeur permet une lecture de code-barres la plus rapide, mais réduit la précision. Le processus saute le prétraitement des images, entraînant souvent des résultats de codes-barres vides. N'utilisez ce réglage que si l'image d'entrée est nette et claire.
- Équilibré : Ce paramètre est recommandé pour la propriété
Speed
. Il établit un équilibre entre la précision et les performances de lecture en tentant d'appliquer un traitement de la lumière à l'image afin de clarifier la zone du code-barres et de la faire ressortir pour que le lecteur de codes-barres la détecte. La plupart du temps, ce paramètre est suffisant pour qu'IronBarcode lise une image de code-barres et produise un résultat précis. - Détaillé : Si l'utilisation du paramètre
ReadingSpeed.Balanced
ne réussit pas à produire une valeur de code-barres à partir de la lecture, les utilisateurs peuvent choisir d'utiliserReadingSpeed.Detailed
. IronBarcode effectue un traitement moyen de l'image afin de clarifier davantage la zone du code-barres et de permettre au lecteur de code-barres de détecter le code-barres. Ce paramètre est très utile pour détecter une image de code-barres petite ou moins nette. -
ExtremeDetail : Ce paramètre est le moins recommandé en raison de son processus exigeant en CPU, où un traitement intensif sera effectué sur l'image du code-barres afin que le lecteur puisse lire les codes-barres. Cela réduira considérablement les performances de lecture d'IronBarcode. Il est conseillé aux utilisateurs d'effectuer le prétraitement de l'image ou d'appliquer des filtres sur l'image avant d'opter pour ce paramètre.
Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. La combinaison de `ReadingSpeed.Detailed` avec `RemoveFalsePositive` défini sur "True" affichera un avertissement dans la console. Cependant, cela n'affectera pas la lecture et peut être ignoré. --> Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. La combinaison de `ReadingSpeed.ExtremeDetail` avec `RemoveFalsePositive` défini sur "True" affichera un avertissement dans la console. Cependant, cela n'affectera pas la lecture et peut être ignoré. -->
UseCode39ExtendedMode
Ce paramètre permet de lire et d'interpréter les codes-barres de type Code39 en mode étendu, ce qui permet d'appliquer l'ensemble du jeu de caractères ASCII. Définir UseCode39ExtendedMode
sur True activera une lecture plus précise des codes-barres Code39.
Advance Barcode Read from Image
Maintenant que nous avons pris connaissance de toutes les options qui peuvent être modifiées par les utilisateurs, que ce soit pour améliorer les performances ou la précision, voyons comment nous pouvons les appliquer dans notre code. L'extrait de code ci-dessous en est la démonstration.
: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());
}
À partir de l'extrait de code, nous pouvons voir que pour utiliser BarcodeReaderOptions
, nous devons d'abord l'initialiser, puis nous pouvons déterminer et ajuster les propriétés de BarcodeReaderOptions
selon les propriétés indiquées ci-dessus. Les BarcodeReaderOptions
initialisés peuvent ensuite être utilisés comme argument dans la méthode BarcodeReader.Read()
avec le fichier image. Cela appliquera tous les paramètres dans BarcodeReaderOptions
lors de la lecture du code-barres à partir de l'image.