ZXing est un outil d'analyse sur les codes à barres (code ON-R, code QR) fourni par Google. Il fournit des méthodes pour générer et analyser les codes QR. Maintenant, je vais présenter brièvement l'utilisation de Java pour générer et analyser les codes QR à l'aide de ZXing.
1. Génération de code QR
1.1 Ajoutez le package zxing-core.jar à ClassPath.
1.2 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.
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); }}}1.3 Écrivez le code d'implémentation qui génère du code QR
try {String content = "120605181003; http: //www.cnblogs.com/jtmjx"; String Path = "C: / Users / Administrator / Desktop / Tesimage"; MultiformatWriter MultiformatWriter = new MultiformatWriter (); MAP INSTERS = NOUVEAU HASHMAP (); hint.put (encodeHintType.Character_set, "UTF-8"); BitMatrix BitMatrix = MultiformatWriter.Encode (Content, BarcodeFormat.QR_CODE, 400, 400, indices); Fichier file1 = nouveau fichier (path, "nambeginner.jpg"); Matrixtoimagewriter.writeTofile (bitmatrix, "jpg", file1); } catch (exception e) {e.printStackTrace (); }Maintenant, après l'exécution, vous pouvez générer une image de code QR. N'est-ce pas très simple? Ensuite, jetons un coup d'œil à l'analyse du code QR
2. Analyse du code QR
2.1 Ajoutez le package zxing-core.jar à ClassPath.
2.2 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); }}2.3 Écrivez le code d'implémentation qui analyse le code QR
essayez {multiformeReader formatReader = new MultiformatReader (); String filepath = "c: /users/administrator/desktop/testimage/test.jpg"; 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 ()); } catch (exception e) {e.printStackTrace (); }Maintenant, après l'exécution, vous pouvez voir que la console imprime le contenu du code QR.
Jusqu'à présent, ZXing a utilisé ZXing pour générer et analyser le code QR et la démonstration a été terminée, faisant principalement des mémos pour vous-même, et en même temps de faire la commodité pour ceux qui en ont besoin. hehe!
L'exemple simple ci-dessus de Java utilisant ZXing pour générer des codes QR est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.