Générer un QR Code avec ou sans logo grâce à Python

Préambule – Mise en contexte

Ayant besoin de réaliser un QR code l’autre jour (Pierrick, si tu me lis ; spéciale dédicace ), et ne voulant pas passer par un service en ligne, j’ai cherché à le faire en python.

Après une recherche avec Firefox et Qwant (je n’utilise pas Chrome ni Google), j’ai trouvé cet article en anglais sur geeksforgeeks.
(après cette année en alternance à 95% en anglais, je ne recherche plus uniquement des ressources en Français)

On édite le code python et on remplace les valeurs voulues.
Pouf ; on joue le script.
OK, c’est bon, ça fait le job.

Oui … Mais … ça ne serait pas mieux si on pouvait utiliser le script sans avoir à le modifier en dur à chaque fois ?
Ne serait-il pas plus opportun de variabiliser des choses ?

Spécificités recherchées

Du coup, j’ai travaillé ce script hier pour en avoir un qui me pose des questions.

D’une part, c’est plus pratique et puis j’aime bien me parler ; il est gentil Alban 😀

  • Tu veux un logo ou pas ?
    • Si oui, quel est le chemin de l’image ?
  • Quelle est l’adresse (ou le texte) que tu veux transformer en QRcode ?
  • Tu veux quelle couleur pour ce QRcode ?
  • Je mets quoi en nom pour le fichier créé ?

Résultat avec logo

Voici ma sortie écran
Voici le QRcode généré

Résultat sans logo

Autre capture de mon Terminal
QRcode menant à cet article

Conclusion

Oui, tout ça pour ça …

Mais je pense que cet article sera utilisé par des gens qui cherchent à générer des QR codes et/ou à s’amuser avec Python comme je le fais.

Certes, je suis devenu Administrateur Systèmes et Réseaux le mois dernier, mais je n’ai jamais étudié le Python et j’imagine qu’il y a plein de gens comme moi 😉

Le code

A l’image de mon année passée, j’utilise l’anglais (à mon niveau) dans mes scripts.
C’est donc « bilingal » comme code 😀

Script mis à jour le 01/11/2024 suite au commentaire de Thibault.
Je vous mets la version intégrale du script que j’utilise actuellement.
Cette dernière version date du 09/06/2024 sur mon PC et fonctionne sans souci.

Merci Thibault pour ton retour qui m’a permis de faire la correction sur le site.

#!/usr/bin/python3
# -*- coding: utf-8 -*

# Script d'origine :
# https://www.geeksforgeeks.org/how-to-generate-qr-codes-with-a-custom-logo-using-python/

# import modules
import qrcode
from PIL import Image

# You have 2 parts in this script
# At first, you generate a QRcode with an image in the center of the QR code
# Or, you generate a QRcode without image.

Logo_added=(int(input("Voulez-vous ajouter un logo à votre QRcode ? :\n 0 = non ; 1 = oui\n")))

# Generating QRcode and Adding an image in the QR code center
if Logo_added>0:
Logo_link =(input("notez le chemin du fichier image\nPar exemple : /home/alban/generate_qr-code/tux.jpeg\n"))
logo = Image.open(Logo_link)

# taking base width
basewidth = 100

# adjust image size
wpercent = (basewidth/float(logo.size[0]))
hsize = int((float(logo.size[1])*float(wpercent)))
logo = logo.resize((basewidth, hsize), Image.LANCZOS)
QRcode = qrcode.QRCode(
error_correction=qrcode.constants.ERROR_CORRECT_H
)

# taking url or text
url=(input("Tapez l'adresse complète avec https:// ou le texte voulu :\n"))

# adding URL or text to QRcode
QRcode.add_data(url)

# generating QR code
QRcode.make()

# taking color name from user
#QRcolor = 'Orange'
QRcolor=(input("Quelle couleur voulez-vous ?\norange, black, white, ... ???\n"))


# adding color to QR code
QRimg = QRcode.make_image(
fill_color=QRcolor, back_color="White").convert('RGB')

# set size of QR code
pos = ((QRimg.size[0] - logo.size[0]) // 2,
(QRimg.size[1] - logo.size[1]) // 2)
QRimg.paste(logo, pos)

# save the QR code generated
#QRimg.save('gfg_QR_bis.png')
name_wanted=(input("Tapez le nom voulu (sans extention) pour le fichier PNG du QR-code :\n"))
name_out=name_wanted+'.png'
QRimg.save(name_out)

print('QR code generated!')

# Generating QRcode without image
else:
print("OK, pas de logo\n")

# adjust image size
QRcode = qrcode.QRCode(
error_correction=qrcode.constants.ERROR_CORRECT_H
)

# taking url or text
url=(input("Tapez l'adresse complète avec https:// ou le texte voulu :\n"))

# adding URL or text to QRcode
QRcode.add_data(url)

# generating QR code
QRcode.make()

# taking color name from user
#QRcolor = 'Orange'
QRcolor=(input("Quelles couleur voulez-vous ?\nOrange, Black, White, ... ???\n"))

# adding color to QR code
QRimg = QRcode.make_image(
fill_color=QRcolor, back_color="White").convert('RGB')

# save the QR code generated
#QRimg.save('gfg_QR_bis.png')
name_wanted=(input("Tapez le nom voulu (sans extention) pour le fichier PNG du QR-code :\n"))
name_out=name_wanted+'.png'
QRimg.save(name_out)

print('QR code generated!')

Spéciale dédicace pour Yohan 😀
Non !!!
Non, non, non !
Tu ne nommes jamais un fichier « logo entreprise.jpg » MAIS « logo_entreprise.jpg » 😉

A propos de Alban

Papa de 4 enfants étant lui-même resté un enfant. Diététicien-Nutritionniste tombé par obligation dans l'informatique à 22 ans pour le boulot et s'étant "un peu" pris au jeu ... Pas un génie de l'informatique (loin de là), mais intéressé et carrément orienté Linux et entraide. Lassé de l'évolution du Monde de la Santé dans lequel les patients sont de plus en plus à traiter comme des clients (je suis un soignant !!!), j'ai opté pour une reconversion en repartant en Alternance... à... 44 ans D'abord dans le cadre d'un BTS SIO option SISR (Solutions d’Infrastructure, Systèmes et Réseaux) en Septembre 2019. Après l’obtention du BTS, j'ai décidé de poursuivre (toujours en alternance) en Bac+3 avec un Bachelor Concepteur de Systèmes d'Information. Depuis septembre 2022, je suis donc encore plus vieux, mais un jeune diplômé "Administrateur Systèmes et Réseaux". Citation personnelle : « Si la réussite facile flatte l’égo, C’est de la persévérance que nait le plaisir de la réussite. »

9 commentaires à propos de “Générer un QR Code avec ou sans logo grâce à Python”

  1. Bonjour,
    Suite à des modifications dans le module pillow 10.0.0, le « ANTIALIAS » ne fonctionne plus…
    On obtient cette erreur : « AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’ »

    Il faut donc modifier comme suit la ligne 28 :
    logo = logo.resize((basewidth, hsize), Image.Resampling.LANCZOS)

    Solution trouvée ici : https://stackoverflow.com/questions/76616042/attributeerror-module-pil-image-has-no-attribute-antialias

    Et ainsi cela fonctionne !
    À plus
    Tibo

    • Oups… ☺️
      C’est vrai.
      J’ai en effet modifié mon script avec « presque » exactement la même solution (trouvée différemment, mais ça revient au même).
      Perso, j’ai :
      logo = logo.resize((basewidth, hsize), Image.LANCZOS)
      Merci pour ton commentaire (puisque le WebMaster (le boulet) de ce site ne l’avait pas fait 😀 )
      ++
      P.S. : Je vais même modifier l’article avec cette correction

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.