Les codes QR sont partout, et vous pouvez le scanner et vous obtiendrez des cadeaux. Les codes QR sont si populaires maintenant. Je crois que tout le monde n'est pas très clair sur la façon dont les codes QR sont générés. Maintenant, l'éditeur partagera avec vous la méthode pour vous aider à apprendre la méthode de génération de code QR en partageant cet article.
En fait, cette fonction est principalement utilisée en utilisant le pot publié par Goggle.
1. Génération de code QR
Ajoutez le package zxing-core.jar à ClassPath.
La génération de code QR nécessite l'aide de la classe MatrixToimageWriter. Cette classe est fournie par Google. Vous pouvez copier la classe sur le code source. Ici, je colle le code source de cette classe et je peux être utilisé directement.
Un code qui peut générer directement le code QR
public void test1 () lève une exception {String Content = "www.baidu.com"; String path = "d: //"; MultiformatWriter MultiformatWriter = new MultiformatWriter (); // Zxing est un code-barres fourni par Google. MAP INSTERS = NOUVEAU HASHMAP (); hint.put (encodeHintType.Character_set, "UTF-8"); BitMatrix BitMatrix = MultiformatWriter.Encode (Content, BarcodeFormat.QR_CODE, 400, 400, Insignes); // c'est la taille du fichier photo Fichier1 = nouveau fichier (Path, "My.jpg"); Matrixtoimagewriter.writeTofile (bitmatrix, "jpg", file1); System.out.println ("Exécution terminée"); }Lorsque nous pouvons constater qu'après avoir copié ce code, nous avons constaté qu'il y avait une erreur rapportée par un MatrixToimagewriter, nous devons donc le rechercher, mais j'ai publié le code ici et je peux être utilisé directement.
import com.google.zxing.common.bitmatrix; import javax.imageio.imageio; Importer java.io.file; import java.io.outputStream; Importer java.io.ioException; Importer java.awt.image.bufferedImage; public final classe matrixtoimagewriter {private static final int black = 0xff000000; Final statique privé int blanc = 0xffffffff; MatrixToimageWriter privé () {} public static bufferedImage toblufferedImage (BitMatrix Matrix) {int width = matrix.getWidth (); int height = matrix.getheight (); BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); pour (int x = 0; x <largeur; x ++) {pour (int y = 0; y <hauteur; y ++) {image.setrgb (x, y, matrix.get (x, y)? noir: blanc); }} Retour image; } public static void writeTofile (BitMatrix Matrix, Format de chaîne, fichier de fichier) lève ioException {BufferedImage image = toblufferedImage (matrix); if (! ImageIo.write (image, format, fichier)) {lancer une nouvelle ioException ("ne peut pas écrire une image de format" + format + "vers" + file); }} public static void writeToStream (Matrix BitMatrix, format de chaîne, flux OutputStream) lève ioException {bufferedImage Image = TobffereDImage (matrix); if (! ImageIo.write (image, format, stream)) {lancer une nouvelle ioException ("ne peut pas écrire une image de format" + format); }}}Vous pouvez maintenant télécharger le code QR généré sur le répertoire racine du disque D
Analyse du code QR
Comme la génération, nous avons besoin d'une classe auxiliaire (BufferedImageLuminancesource), qui est également fournie par Google. Ici, je colle aussi le code source de cette classe et je peux le copier et l'utiliser directement, en enregistrant les problèmes de recherche.
BufferedImageLuminancesource Import com.google.zxing.luminancesource; import java.awt.graphics2d; Importer java.awt.geom.AffinetRansform; Importer java.awt.image.bufferedImage; Classe finale publique BufferedImageLuminancesource étend Luminancesource {Image finale privée finale; Final privé int Left; Top int privé final; Public BufferedImageLuminancesource (image de tampon) {this (image, 0, 0, image.getWidth (), image.getheight ()); } public BufferedImageLuMinancesource (image de tampon, int Left, int top, int, int hauteur) {super (largeur, hauteur); int sourcewidth = image.getWidth (); int sourceHeight = image.getheight (); if (gauche + largeur> sourcewidth || top + height> SourceHeight) {lancez un nouveau IllégalArgumentException ("Crop Rectangle ne correspond pas aux données de l'image."); } pour (int y = top; y <top + height; y ++) {for (int x = gauche; x <Left + width; x ++) {if ((image.getrgb (x, y) & 0xff000000) == 0) {image.setrgb (x, y, 0xfffffff); // = blanc}}} this.image = new BufferedImage (sourcewidth, sourceHeight, bufferedImage.type_byte_gray); this.image.getGraphics (). DrawImage (image, 0, 0, null); this.left = gauche; this.top = top; } @Override public octet [] getrow (int y, byte [] row) {if (y <0 || y> = getheight ()) {lancez new illégalargumentException ("La ligne demandée est en dehors de l'image:" + y); } int width = getWidth (); if (row == null || row.length <width) {row = new byte [width]; } image.getRaster (). GetDataelements (gauche, haut + y, largeur, 1, ligne); ligne de retour; } @Override public byte [] getMatrix () {int width = getWidth (); int hauteur = getheight (); INT Area = Largeur * Hauteur; octet [] matrice = nouveau octet [zone]; image.getRaster (). GetDataelements (gauche, haut, largeur, hauteur, matrice); matrice de retour; } @Override public boolean isCropsupported () {return true; } @Override public Luminancesource Crop (int Left, int top, int largeth, int height) {return new tampreDiMageLuminancesource (image, this.left + gauche, this.top + top, largeur, hauteur); } @Override public boolean isrotatesupported () {return true; } @Override public Luminancesource rotateCounterClockWise () {int sourcewidth = image.getWidth (); int sourceHeight = image.getheight (); AffineTransform Transform = Nouveau AffineTransform (0,0, -1,0, 1,0, 0,0, 0,0, SourceWidth); BufferedImage RotateDImage = new BufferedImage (SourceHeight, SourceWidth, BufferedImage.Type_Byte_Gray); Graphics2d g = rotateDImage.Creategraphics (); G.DrawImage (image, transform, null); g.dispose (); int width = getWidth (); Renvoie un nouveau bufferedImageLuminancesource (RotateDImage, haut, SourceWidth - (gauche + largeur), Getheight (), largeur); }}Code pour analyser le code QR
MultiformatReader FormataReader = new MultiformatReader (); String filepath = "Path de l'image"; Fichier fichier = nouveau fichier (filepath); BufferedImage Image = imageo.read (fichier) ;; Luminancesource Source = new BufferedImageLuminancesource (image); Binarizer Binarizer = New Hybridbinarizer (source); BinaryBitmap BinaryBitmap = new BinaryBitmap (binarizer); MAP INSTERS = NOUVEAU HASHMAP (); hint.put (encodeHintType.Character_set, "UTF-8"); Résultat résultat = formatReader.decode (binarybitmap, indices); System.out.println ("result =" + result.toString ()); System.out.println ("resultFormat =" + result.getBarCodeFormat ()); System.out.println ("resultText =" + result.getText ()); tch (exception e) {e.printStackTrace ();Maintenant, vous pouvez voir le contenu du code QR sur la console.
Ce qui précède est la connaissance pertinente sur la façon de générer des codes QR par zxing-core et les analyser. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!