Sciences informatiques et numériques : SNT/NSI

Enrichissez vos productions avec les codes QR !

Générer des codes QR avec python (niveau : débutant)


(Source : https://medium.com/better-programming/how-to-generate-and-decode-qr-codes-in-python-a933bce56fd0)

 

A la fin de cet article, vous saurez créer des codes QR (trois modes : rapide, normal et personnalisé) que vous pourrez intégrer dans vos productions.

 

Un code QR, aussi appelé QR code (de l'anglais : quick response code, « code à réponse rapide ») est un type de code-barres en deux dimensions (ou code matriciel) constitué de modules noirs disposés dans un carré à fond blanc. L'agencement de ces points définit l'information que contient le code.

(Source : https://fr.wikipedia.org/wiki/Code_QR)

Il y a quatre parties dans cet article :

 

1. Préparatifs

2. Mode rapide

3. Mode normal

4. Mode personnalisé

 

1. Préparatifs

Il faut au préalable installer la bibliothèque qrcode.

Si vous utilisez l’éditeur Edupython, dans la barre de menu, choisir :

Outils > Outils > Installation d’un nouveau module

> Choix 2 : Installation à l’aide de pip > Votre choix : 2

>Nom du module : qrcode

2. Mode rapide   

Après avoir enregistré le code suivant dans un dossier, vous pourrez y récupérer le QR code après exécution.

______________________________________________________________________________________

import qrcode

from PIL import Image

texte = 'Je suis pressé ! \n http://www.ac-guadeloupe.fr'

imgModeRapide = qrcode.make(texte)

imgModeRapide.save("qr_code_mode_rapide.png") 

______________________________________________________________________________________

Remarque : on utilise « \n » pour faire un retour à la ligne dans la chaîne de caractères "texte".

 

Résultat :

 qrCodeRapide

3. Mode normal

En suivant la même procédure que dans l’exemple précédent :

______________________________________________________________________________________

import qrcode

from PIL import Image

qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_Q,box_size=6,border=8)

data="Code QR en mode normal \n A vous de jouer !"

qr.add_data(data)

qr.make(fit=True)

img=qr.make_image(fill="black",back_color="pink").convert('RGB')

img.save("codeQr_mode_normal.png")

______________________________________________________________________________________

 

Résultat :

qrCodeNormal

Dans cette version, vous avez accès aux différents paramètres du code QR généré :

 

>>> version : Il existe différentes versions du code QR (de 1  à 40) allant de 25 à 4 296 caractères :

Ci-dessous, différentes versions de Code QR pour un taux de redondance de 7 %

(source : wikipedia)

qrCode1

qrCode2

qrCode3

Version 1, 21×21,

10-25 caractères.

 

Version 2, 25×25,

20-47 caractères.

 

Version 3, 29×29,

35-77 caractères.

 

qrCode4

qrCode5

qrCode6

Version 4, 33×33,

67-114 caractères.

 

Version 10, 57×57, 

174 à 395 caractères.

 

Version 40, 177×177,

 1 852 à 4 296 caractères.

 

 

>>> box_size : dimension (en pixels) de la plus petite unité d’information du code QR (petit carré)

>>> border : détermine l’épaisseur des bordures (taille minimale 4)

>>>  error_correction : Les codes QR utilisent le système Reed-Solomon pour la correction d'erreur : le code peut contenir jusqu'à 30 % de redondance.

Capacité à corriger les erreurs :

  • Niveau L : environ 7 % de redondance
  • Niveau M : environ 15 %
  • Niveau Q : environ 25 %
  • Niveau H : environ 30 %

  4. Mode personnalisé

Vous pouvez également, insérer un logo à l’intérieur de votre code QR.

Image à insérer :

logoQrcode

Résultat :

qrCodePersonnalise

Pour cela il suffit d’ajouter quelques lignes :

______________________________________________________________________________________

import qrcode

from PIL import Image

qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_Q,box_size=10,border=4)

data="BONNES FETES !"

qr.add_data(data)

qr.make(fit=True)

img=qr.make_image(fill="white",back_color="yellow").convert('RGB')

logo_display = Image.open('champagne80_80.png')

logo_display.thumbnail((80, 80))

logo_pos = ((img.size[0] - logo_display.size[0]) // 2, (img.size[1] - logo_display.size[1]) // 2)

img.paste(logo_display, logo_pos)

img.save("qrCodePersonnalise.png")

______________________________________________________________________________________

 

Bonnes créations !

Pour aller plus loin, reportez-vous à l’article original.