Skip to content

Générer une image QR code avec Python, Pillow, qrcode

Vous pouvez facilement générer des images de code QR à l’aide de la bibliothèque de génération de code QR de Python qrcode. Il est également possible d’intégrer un code QR dans une autre image ou d’intégrer une image dans un code QR à l’aide de Pillow.

Cet article décrit le contenu suivant.

  • Générateur d’images Python QR Code :qrcode
  • Générer une image de code QR à partir de la ligne de commande
  • Générer une image de code QR avec le code Python
    • Version du code QR de l’image générée :version
    • Niveau de correction d’erreur :error_correction
    • Taille de cellule :box_size
    • Largeur de marge :border
    • Couleur:fill_color, back_color
  • Intégrer le code QR dans l’image
  • Intégrer l’image dans le code QR

Générateur d’images Python QR Code :qrcode

Le code QR est un code bidimensionnel composé de points carrés noirs et blancs (cellules) normalisé par ISO (ISO/IEC 18004) et JIS (JIS-X-0510).

Python a une bibliothèque qrcode pour générer des images de code QR.

Il peut être installé avec pip (ou pip3).

Veuillez également installer Pillow (PIL).

Générer une image de code QR à partir de la ligne de commande

Si vous souhaitez uniquement créer une image de code QR simple, vous pouvez utiliser la ligne de commande.

Une fois qrcode installé, vous pouvez utiliser la commande qr.

$ qr "text for qrcode" > qrcode.png

Dans cet exemple, un fichier image de code QR nommé qrcode.png contenant le texte de données de chaîne pour qrcode est généré. La taille de l’image est ajustée automatiquement en fonction de la longueur de la chaîne.

Le code QR contient uniquement une chaîne. Le traitement d’une chaîne dépend de l’application qui lit le code QR.

Par exemple, dans de nombreuses applications d’appareil photo pour smartphone prenant en charge la lecture de code QR, si le code QR contient une URL, une notification indiquant si l’URL doit être ouverte s’affiche et, si l’utilisateur l’autorise, elle s’ouvre dans le navigateur.

Générer une image de code QR avec le code Python

qrcode.make() crée un objet PilImage.

Avec l’objet PilImage, vous pouvez utiliser les attributs et les méthodes de l’objet Pillow(PIL) Image, comme la taille.

Utilisez save() pour enregistrer en tant que fichier image.

import qrcode

img = qrcode.make('test text')

print(type(img))
print(img.size)
# 
# (290, 290)

img.save('data/dst/qrcode_test.png')

code qr python

Vous pouvez également utiliser la classe QRCode pour modifier les détails.

Le flux de base est le suivant.

qr = qrcode.QRCode()
qr.add_data('test text')
qr.make()
img = qr.make_image()
img.save('data/dst/qrcode_test2.png')

Vous pouvez effectuer divers réglages.

qr = qrcode.QRCode(
    version=12,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=2,
    border=8
)
qr.add_data('test text')
qr.make()
img = qr.make_image(fill_color="red", back_color="#23dda0")
img.save('data/dst/qrcode_test2_2.png')

avance de python qrcode

Chaque paramètre sera décrit ci-dessous.

Version du code QR de l’image générée :version

La version du code QR de l’image générée peut être définie sur version.

Pour la relation entre la capacité d’information et les versions de code QR, reportez-vous à la page officielle de Denso Wave ci-dessous.

À mesure que la valeur de la version augmente, le nombre de cellules (points carrés noirs et blancs) inclus dans le code QR augmente, et la taille de l’image et la capacité d’information augmentent. La valeur minimale de version est 1 et la valeur maximale est 40.

En spécifiant la version, vous pouvez générer une image de code QR plus grande que la version optimale (taille minimale), elle est donc utile lorsque vous souhaitez créer plusieurs codes QR avec différents contenus de données avec la même taille.

Notez que même si vous spécifiez une version plus petite, si les données ne correspondent pas, ce sera automatiquement la version minimale qui correspond aux données.

Niveau de correction d’erreur :error_correction

Vous pouvez définir le niveau de correction d’erreur avec error_correction.

Il y a les quatre niveaux suivants. Les valeurs entre parenthèses indiquent la capacité de correction d’erreurs (taux de correction d’erreurs pour tous les mots de code).

  • qrcode.constants.ERROR_CORRECT_L (environ 7 %)
  • qrcode.constants.ERROR_CORRECT_M (environ 15 %, par défaut)
  • qrcode.constants.ERROR_CORRECT_Q (environ 25 %)
  • qrcode.constants.ERROR_CORRECT_H (environ 30 %)

Pour plus d’informations sur la fonction de correction des erreurs de code QR, reportez-vous à la page officielle de Denso Wave ci-dessous.

Lors de la génération d’une image de code QR à partir d’une chaîne de même longueur, l’augmentation du niveau de correction d’erreur augmente la taille de l’image de code QR générée.

Taille de cellule :box_size

Avec box_size, vous pouvez définir la taille de la cellule (point carré noir et blanc) en pixels.

Même si la version est la même (le nombre de cellules est le même), vous pouvez modifier la taille de l’image générée en modifiant box_size.

La valeur par défaut est 10.

Largeur de marge :border

Vous pouvez utiliser border pour définir la largeur (nombre de cellules) de la marge extérieure.

Le nombre de pixels dans la largeur de la marge est box_size * border.

La valeur par défaut est 4, qui est la largeur minimale dans la spécification.

Couleur : fill_color, back_color

Vous pouvez définir la couleur avec fill_color et back_color de la méthode make_image().

Spécifiez fill_color et back_color en utilisant les noms de couleur noir, blanc, rouge, etc. ou le style #xxxxxx.

Intégrer le code QR dans l’image

Les objets PilImage peuvent être collés directement sur d’autres images à l’aide de la méthode paste() de l’objet Pillow Image.

L’exemple de code pour coller le code QR dans le coin inférieur droit est le suivant.

import qrcode
from PIL import Image

img_bg = Image.open('data/src/lena.jpg')

qr = qrcode.QRCode(box_size=2)
qr.add_data('I am Lena')
qr.make()
img_qr = qr.make_image()

pos = (img_bg.size[0] - img_qr.size[0], img_bg.size[1] - img_qr.size[1])

img_bg.paste(img_qr, pos)
img_bg.save('data/dst/qr_lena.png')

image d'oreiller qrcode python

Pour plus d’informations sur paste(), consultez les articles suivants :

Intégrer l’image dans le code QR

Il est facile d’intégrer l’image dans le code QR.

A noter que la superposition d’une image sur un QR code n’est pas officiellement recommandée.

Est-il acceptable d’utiliser des codes QR avec des couleurs ou une illustration insérée ?

Les utilisateurs de QR Code doivent faire attention à ne pas déformer le code en le superposant avec une illustration ou en y mettant un dessin. S’il est déformé, la fonction de correction d’erreur du QR Code est appelée là où même une petite partie manquante ou tachée rend l’opération de lecture impossible, ou la réponse de l’opération peut devenir lente.
DENSO WAVE vous recommande d’utiliser le code QR conformément aux spécifications de la norme JIS ou ISO pour assurer une lecture stable du code QR.
De plus, si le QR Code est recouvert d’une illustration ou d’un dessin, le code résultant ne peut plus être appelé QR Code, car il n’existe aucune norme pour effectuer ce type d’opération. Bien que DENSO WAVE renonce à ses droits sur les codes QR tant qu’ils respectent la norme JIS ou ISO, ce n’est pas nécessairement le cas avec les codes qui ne respectent pas la norme. DENSO WAVE peut décider d’exercer ses droits de brevet sur ces codes.
Si vous envisagez d’organiser une illustration ou une conception impliquant un code QR, veuillez consulter DENSO WAVE au sujet de votre projet au préalable.

face = Image.open('data/src/lena.jpg').crop((175, 90, 235, 150))

qr_big = qrcode.QRCode(
    error_correction=qrcode.constants.ERROR_CORRECT_H
)
qr_big.add_data('I am Lena')
qr_big.make()
img_qr_big = qr_big.make_image().convert('RGB')

pos = ((img_qr_big.size[0] - face.size[0]) // 2, (img_qr_big.size[1] - face.size[1]) // 2)

img_qr_big.paste(face, pos)
img_qr_big.save('data/dst/qr_lena2.png')

python qrcode oreiller image2

En fonction de la taille de l’image à intégrer, il est prudent de définir le niveau de correction d’erreur (error_correction) sur un niveau élevé. De plus, lors de l’intégration d’une image couleur dans un code QR noir et blanc, il est nécessaire de convertir le code QR en mode RVB avec convert(‘RGB’).