Générer un QR Code en PL/SQL
par
, 07/09/2020 à 15h35 (2659 Affichages)
Voici une procédure qui permet de générer un QR Code en PL/SQL.
Je me suis basé sur le site http://www.thonky.com/qr-code-tutorial qui détaille très bien toutes les étapes de calculs et de placement.
En entrée de procédure : Le texte, et en option, la qualité (défaut Q), et un mask pattern (pour le mode débug)
En sortie, on retourne un tableau de ligne (4000 caractères) contenant les 1 (case noire) et 0 (case blanche), ainsi que la hauteur et largeur de l'image à générer
Je me base sur mon package de gestion d'image (amélioré depuis mon blog précédent avec une gestion du format png et un nouveau paramètre d'inversion noir/blanc)
Voici le package d'image et la procédure de génération de QRCode : QRCODE.zip
Exemples d'utilisation :
Création d'un QRCODE dans la table WTT_UPLOAD (id=151) en PNG
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 DECLARE v_image IMAGE_PKG.LIGNE_DATA; v_larg NUMBER; v_haut NUMBER; BEGIN P_QRCODE (p_chaine => 'CECI EST MON QRCODE', p_quality => 'Q', p_image => v_image, p_largeur => v_larg, p_hauteur => v_haut); IMAGE_PKG.CREATION_FICHIER_IMAGE (p_data => v_image, p_largeur => v_larg, p_hauteur => v_haut, p_typeImg => 'PNG', p_IDWTT => 151, p_Nbcoul => 2, p_negatif => 'O'); END;
Génération d'un QRCode dans un BLOB (en inversant le noir et le blanc)
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DECLARE v_image IMAGE_PKG.LIGNE_DATA; v_larg NUMBER; v_haut NUMBER; v_lob BLOB; BEGIN P_QRCODE (p_chaine => 'CECI EST MON QRCODE', p_quality => 'Q', p_image => v_image, p_largeur => v_larg, p_hauteur => v_haut); v_lob := IMAGE_PKG.CREATION_BMP(p_data => v_image, p_largeur => v_larg, p_hauteur => v_haut, p_Nbcoul => 2, p_negatif => 'O'); END;
Création d'un BMP en damier de 2x2 dans un BLOB
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DECLARE v_lob BLOB; v_image IMAGE_PKG.LIGNE_DATA; v_larg NUMBER := 2; v_haut NUMBER := 2; BEGIN v_image(0) := '01'; v_image(1) := '10'; v_lob := IMAGE_PKG.CREATION_BMP(p_data => v_image, p_largeur => v_larg, p_hauteur => v_haut, p_Nbcoul => 2); END;