Le code QR est une image de code-barres qui utilise des figures géométriques du plan noir et blanc pour enregistrer du texte, des images, des URL et d'autres informations via des algorithmes de codage correspondants. La figure suivante
Caractéristiques du code QR:
1. Codage à haute densité, grande capacité d'information
Il peut accueillir jusqu'à 1850 majuscules ou 2710 numéros ou 1108 octets, ou plus de 500 caractères chinois, ce qui est environ des dizaines de fois plus élevé que les informations de code-barres ordinaires.
2. Plage d'encodage large
Ce code-barres peut coder des informations numérisées telles que des images, des sons, des textes, des signatures, des empreintes digitales, etc., et les exprimer en codes à barres; Ils peuvent représenter le texte en plusieurs langues; et ils peuvent représenter les données d'image.
3. Fonction de tolérance de défaut et de correction d'erreur forte
Cela permet au code-barres bidimensionnel d'être correctement endommagé en raison de la perforation, de la souillure, etc., et les informations peuvent toujours être récupérées si la zone de dommage atteint 50%.
4. Fiabilité du décodage élevé
Il est bien inférieur au taux d'erreur du décodage de code-barres ordinaire de deux parties par million, et le taux d'erreur n'est pas plus d'une parties par million.
5. Des mesures de chiffrement peuvent être introduites
Bonne confidentialité et anti-contrefaçon.
6. faible coût, facile à faire, durable
En raison des caractéristiques ci-dessus, les codes QR deviennent de plus en plus populaires et sont plus largement utilisés (voir Baidu Encyclopedia pour plus de détails, l'introduction n'est pas au centre de cet article). Par conséquent, la maîtrise de la façon de développer des codes QR est une très bonne réserve de connaissances. Par conséquent, cet article vous expliquera comment générer et analyser les codes QR.
1. Java
Package JAR requis: qrcode.jar
http://sourceforge.jp/projects/qrcode/
TwodimensionCode Classe: Clastique de fonction du code QR
package qrcode; import java.awt.color; import java.awt.graphics2d; importer java.awt.image.bufferedimage; import java.io.file; import java.ioexception; import java.io.inputStream; import java.io.outputstream; import javax.imageio.imageio; import jp.sourceforge.qrcode.qrcodedecoder; import jp.sourceforge.qrcode.exception.decodingFailedException; import com.swetake.util.qrcode; public class twodimensioncode {/ ** * générer le code qr (qrcode) image * @param contenu de contenu contenu contenu contenu du magasin * @Param IMGPATh EncoderQrCode (String Content, String imgPath) {this.encoderqrcode (contenu, imgpath, "png", 7); } / ** * générer du code QR (QRCODE) PAGINE * @Param Content Store Content * @Param Output Structive Stream * / public void EncoderQrcode (String Content, OutputStream Output) {this.encoderqrcode (contenu, sortie, "png", 7); } / ** * générer du code QR (QRCODE) Picture * @param Content Store Content * @param ImgPath Picture Path * @param imgType Type d'image * / public void EncoderQrcode (String Content, String imgPath, String imgtype) {this.encoderqrcode (contenu, imgpath, imgtype, 7); } / ** * générer du code QR (QRCODE) Picture * @Param Content Store Content * @Param Output Structive Stream * @param ImgType Type d'image * / public void EncoderQrcode (String Content, OutputStream output, String ImgType); } / ** * générer du code QR (QRCODE) Image * @Param Content Store Content * @param IMGPATATH PATAL IMAGE * @Param ImgType Type d'image * @param size QR Code Taille * / public void EncoderQrcode (String Content, String imgpath, string imgtype, int size) {try {trys imgtype, taille); Fichier imgfile = nouveau fichier (imgpath); // Générer le code QR QRCODE Image ImageIo.Write (bufimg, imgType, imgFile); } catch (exception e) {e.printStackTrace (); }} / ** * générer du code QR (QRCODE) Image * @Param Content Store Content * @param Sortie Sortie Stream * @param IMGTYPE Type d'image * @param size QR Code Size * / public void EncoderQrcode (String Content, OutputStream outweet, string imgtype, int size) {Try {buffredimage bufimg = this.qrCodeCorm (contenu, imgype, bufage bufimg = this.qrCOCORD taille); // Générer le code QR QRCODE Image imageo.write (bufimg, imgtype, sortie); } catch (exception e) {e.printStackTrace (); }} / ** * Méthode publique pour générer des images de code QR (QRCODE) * @Param Content Store Content * @param ImgType Image Type * @param size QR Code size * @return * / private BufferedImage qrCodeCommon (String Content, String imgType, int size) {buffreDimage bufimg = Null; try {qrcode qrcodeHandler = new qrcode (); // Définit le taux d'erreur du code QR, qui peut être sélectionné comme L (7%), M (15%), Q (25%) et H (30%). Plus le taux d'erreur est élevé, moins les informations peuvent être stockées, mais plus les exigences de la clarté du code QR QRCODEHandler.SetQrCodeErrorCorrect («M») qrcodeHandler.setQrCodeEncodeMode ('b'); // Définissez la taille du code QR, avec une plage de valeur de 1-40. Plus la valeur est grande, plus la taille est grande, plus les informations que vous pouvez stocker QRCodeHandler.setQrCodeVersion (taille); // Obtenez le tableau d'octets de contenu et définissez le format de codage octet [] contentBytes = content.getBytes ("utf-8"); // taille d'image int imgsize = 67 + 12 * (taille - 1); bufimg = new BufferedImage (imgsize, imgsize, bufferedImage.type_int_rgb); Graphics2d gs = bufimg.creategraphics (); // Définir la couleur d'arrière-plan gs.setbackground (Color.white); gs.ClearRect (0, 0, imgsize, imgsize); // Définir la couleur de l'image> Black Gs.SetColor (Color.Black); // Définir le décalage, non le réglage peut provoquer des erreurs d'analyse int pixoff = 2; // Sortie Contenu> QR Code if (ContentBytes.Length> 0 && ContentBytes.Length <800) {boolean [] [] codeout = qrcodeHandler.calqrcode (contentBytes); pour (int i = 0; i <codeout.length; i ++) {for (int j = 0; j <codeout.length; j ++) {if (codeout [j] [i]) {gs.fillrect (j * 3 + pixoff, i * 3 + pixoff, 3, 3); }}}} else {lance une nouvelle exception ("qrcode contenu bytes longueur =" + contentBytes.Length + "pas dans [0, 800]."); } gs.dispose (); bufimg.flush (); } catch (exception e) {e.printStackTrace (); } return bufimg; } / ** * Analyser le code QR (QRCODE) * @param ImgPath Image Path * @return * / public String DecoderQrCode (String imgPath) {// QRCODE QR CODE CODE FILE FILE FILE IMAGEFILE = NOUVEAU FILE (IMGPATH); BufferedImage bufimg = null; String Content = NULL; try {bufimg = imageo.read (imagefile); QRCODEDECODER DECODER = NOUVEAU QRCODEDECODER (); Content = new String (decoder.decode (new twodimensionCodeImage (bufimg)), "utf-8"); } catch (ioException e) {System.out.println ("erreur:" + e.getMessage ()); e.printStackTrace (); } catch (decodingFailedException dfe) {System.out.println ("error:" + dfe.getMessage ()); dfe.printStackTrace (); } return contenu; } / ** * PARSING QR CODE (QRCODE) * @PARAM Input Input Stream * @return * / public String DecoderQrcode (InputStream Input) {BufferedImage bufimg = null; String Content = NULL; try {bufimg = imageo.read (input); QRCODEDECODER DECODER = NOUVEAU QRCODEDECODER (); Content = new String (decoder.decode (new twodimensionCodeImage (bufimg)), "utf-8"); } catch (ioException e) {System.out.println ("erreur:" + e.getMessage ()); e.printStackTrace (); } catch (decodingFailedException dfe) {System.out.println ("error:" + dfe.getMessage ()); dfe.printStackTrace (); } return contenu; } public static void main (string [] args) {String imgpath = "g: /tddownload/michael_qrcode.png"; String encoderContent = "Hello Big, Small, bienvenue sur qrcode!" + "/ nmyblog [http://sjsky.iteye.com]" + "/ nemail [[email protected]]"; TwodimensionCode Handler = new TwodimensionCode (); handler.encoderqrcode (EncoderContent, imgpath, "png"); // try {// outputStream Output = new FileOutputStream (imgpath); // handler.encoderqrcode (contenu, output); //} catch (exception e) {// e.printStackTrace (); //} System.out.println ("============= Succès de l'encodeur"); String decoderContent = handler.decoderqrcode (imgPath); System.out.println ("Le résultat d'analyse est le suivant:"); System.out.println (DecoderContent); System.out.println ("=========== Succès du décodeur !!!"); }}TwodimensionCodeImage Classe: Qr Code Image Object
package qrcode; import java.awt.image.bufferedImage; import jp.sourceforge.qrcode.data.qrcodeImage; public class twodimensionCodeImage implémente qrcodeImage {bufferedImage bufimg; public twodimensionCodeImage (bufferedImage bufimg) {this.bufimg = bufimg; } @Override public int getheight () {return bufimg.getheight (); } @Override public int getPixel (int x, int y) {return bufimg.getrgb (x, y); } @Override public int getWidth () {return bufimg.getWidth (); }}Ce qui précède est les informations pour la génération et l'analyse des codes Java QR. Nous continuerons de les ajouter plus tard. Merci pour votre soutien pour ce site Web!