Largement utilisés dans diverses applications, le QR Code (code QR en français) peut être vu dans des bars, des musées, sur des vaches ou des affiches publicitaires comme l'image ci-dessus.
Le QR Code est un type de code-barres en deux dimensions (ou code matriciel datamatrix) constitué de modules noirs disposés dans un carré à fond blanc qui a été inventé au Japon. Il est breveté mais son inventeur, Denso Wave, a choisi de ne pas l'exercer au bénéfice de tous. Le code a depuis gagné en popularité en raison de sa capacité à inclure un grand nombre de données en une seule image ainsi que la prolifération des smartphones et des applications liées.
- Préambule
- Votre premier QR Code en PHP
- Les fonctionnalités avancées de PHP QR Code
- Conclusion
Dans cet article je vais vous montrer comment générer des QR Codes à partir d'un script en PHP. Nous allons utiliser PHP QR Code qui est une librairie écrite en PHP basée sur celle originellement écrite en C et appelée libqrencode créée par Kentaro Fukuchi. Cette librairie PHP permet de générer des QR Codes et ne nécessite pas de dépendances hormis le fait que vous avez besoin de l'extension GD2 pour la création des images.
Commencez par télécharger la dernière version de la librairie depuis GitHub. Mettez son contenu sur votre serveur web, par exemple ici : http://localhost/phpqrcode.
Vous pouvez entrer n'importe quel texte dans le champs data que vous voulez convertir en QR Code comme le montre le screenshot ci-dessus. Si ça ne fonctionne pas, vérifiez que vous avez bien l'extension GD2 d'installée en vérifiant via la fonction phpinfo();.
On va aller un peu plus loin et créer notre propre script. Pour cela créez un fichier qrcode.php à la racine de votre serveur web : http://localhost/qrcode.php et mettez-y le code suivant :
include "phpqrcode/qrlib.php"; QRcode::png("https://www.crazyws.fr/");
C'est simple comme bonjour! En deux lignes de code vous avez votre QR Code. Mais ce n'est évidemment pas la seule possibilité de PHP QR Code. La bibliothèque possède beaucoup plus de fonctionnalités.
Voici un exemple avec ces fonctionnalités :
include "phpqrcode/qrlib.php"; QRcode::png("https://www.crazyws.fr/", "crazyws.png", "L", 4, 4);
- Le premier paramètre spécifie le texte ou les données qui seront encodées dans l'image et est passée comme une chaîne normale.
- Le deuxième paramètre est le nom du fichier de sortie pour l'image générée (ici PNG). La valeur par défaut est un booléen à false et dans ce cas l'image est envoyée directement au navigateur sinon enregistrée au même endroit où se trouve le script.
- Le troisième paramètre est le niveau de correction d'erreur pour le QR Code généré, transmis sous forme d'un caractère. Il détermine la quantité de données par codewords (8 bits par codewords) qui peut être restaurée pour une image QR Code déformée ou endommagée à l'aide de l'algorithme de Reed-Solomon de correction d'erreur. Si le niveau de correction est haut alors la quantité de données dans le QR Code sera moindre suivant aussi la dimension donnée. Voici un tableau récapitulatif des niveaux liés au pourcentage de restauration avec les paramètres utilisés lors de l'appel de la méthode.
Niveau | Pourcentage de restauration | Constante sur PHP QR Code |
---|---|---|
Bas | 7% | L |
Moyen | 15% | M |
Quartile | 25% | Q |
Haut | 30% | H |
- Le quatrième paramètre spécifie la taille de chacun des carrés de code du QR Code mesurée en pixels. Chaque carré de code (également appelé "pixels" ou "modules") est de 4*4px par défaut.
- Le cinquième paramètre spécifie la limite de la marge blanche autour du QR Code mesurée en "modules". Par exemple un margin de 16px sur chaque côté pour 4*4px module par défaut.
La bibliothèque prend en charge l'exportation en PNG, SVG et EPS, et vous pouvez produire des QR Codes dans un de ces formats en changeant simplement le nom de la méthode de png() pour svg() ou eps() et utiliser l'extension correcte pour l'image générée dans le nom de fichier.
Vous pouvez aussi changer la couleur de fond et de premier plan en les passant en paramètres supplémentaires :
include "phpqrcode/qrlib.php"; $bgcolor = 0xCC0000; $fgcolor = 0x00CC00; QRcode::svg("https://www.crazyws.fr/", "crazyws.svg", "L", 4, 4, false, $bgcolor, $fgcolor);
La bibliothèque possède plus de fonctionnalités que vous pourrez retrouver sur le Wiki dédié comme par exemple la mise en cache, etc...
Petite astuce toujours en rapport avec les QR Codes, si vous souhaitez obtenir la taille finale de l'image à l'avance, voici une formule simple :
Taille de l'image (px) = (Pixels par module) × (Taille du module + 8)
Comme je vous l'ai dit tout à l'heure, les pixels par module sont spécifiés dans le quatrième paramètre de la méthode de génération et la taille du module est sélectionnée à partir ces tables QR Code de dimensionnement de la version 1 à 10.
Si vous calculez la taille du module à partir de notre exemple avec la version 1, vous aurez en taille d'image ceci avec notre formule :
Taille de l'image (px) = 4 × (21 + 8) = 116*116px
Mais comme vous pouvez le voir notre image générée est de 132*132px car PHP QR Code a pris la version 2 (module de 25x25) de sorte que maintenant la taille sera bien de :
Taille de l'image (px) = 4 × (25 + 8) = 132×132px
Maintenant vous savez comment générer facilement des QR Codes pour vos applications web. Je vous ai également montré comment calculer la taille de l'image finale générée à l'avance, car la bibliothèque ne prévoit pas cette fonctionnalité.
MISES A JOUR DE L'ARTICLE |
Bonsoir,
J'obtient un message d'erreur :
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in ...qrconst.php on line 51
Merci de votre aide.
Merci je n'avais pas trouvé d'exemple pour mon projet de génération de QRcode, super !
Merci pour le tuto! bon boulot! je vais essayer ça cette aprem
Bonjour,
moi l'image ne s'affiche pas.. Pourtant ma version php est la bonne.
Merci de votre aide
Phpiquement
Bonjour Vous dites que le 2ème paramètre est réglé par défaut sur false, comment le régler sur True pour que l'image n'aille pas sur le navigateur mais simplement stockée dans le répertoire
Merci