QR -Codes sind überall und Sie können es scannen und Sie erhalten Geschenke. QR -Codes sind jetzt so beliebt. Ich glaube, jeder ist nicht sehr klar darüber, wie QR -Codes erzeugt werden. Jetzt wird der Editor die Methode mit Ihnen weitergeben, um Ihnen dabei zu helfen, die Methode zur Erzeugung der QR -Code zu lernen, indem Sie diesen Artikel teilen.
Tatsächlich wird diese Funktion hauptsächlich mit dem von Grotgles veröffentlichten Glas verwendet.
1. Erzeugung von QR -Code
Fügen Sie das Paket zxing-core.jar zu classPath hinzu.
Die Erzeugung von QR -Code erfordert die Hilfe der MatrixtoimageWriter -Klasse. Diese Klasse wird von Google bereitgestellt. Sie können die Klasse in den Quellcode kopieren. Hier füge ich den Quellcode dieser Klasse ein und kann direkt verwendet werden.
Ein Code, der direkt einen QR -Code generieren kann
public void test1 () löst Ausnahme aus {String content = "www.baidu.com"; String path = "d: //"; MultiformatWriter multiformatWriter = new MultiformatWriter (); // Zxing ist ein von Google bereitgestellter Barcode. MAP Hins = new HashMap (); Hints.put (EncodehintType.character_set, "utf-8"); Bitmatrix bitmatrix = multiformatwriter.encode (Inhalt, BarcodeFormat.qr_code, 400, 400, Hinweise); // Dies ist die Größe der Fotodatei1 = neue Datei (Pfad, "my.jpg"); MatrixtoimageWriter.WritetoFile (Bitmatrix, "JPG", Datei1); System.out.println ("Ausführung abgeschlossen"); }Wenn wir feststellen, dass wir nach dem Kopieren dieses Codes festgestellt haben, dass ein Fehler von einem MatrixtoimageWriter gemeldet wurde. Wir müssen also nach ihm suchen, aber ich habe den Code hier gepostet und kann direkt verwendet werden.
import com.google.zxing.common.bitmatrix; import Javax.imageo.imageo; Import Java.io.file; importieren java.io.outputstream; importieren java.io.ioException; Import Java.awt.image.BuffenedImage; public Final Class MatrixtoimageWriter {private statische endgültige int schwarz = 0xff000000; private statische endgültige int weiß = 0xffffffff; private matrixtoimageWriter () {} public static bufferedImage tobedimage (bitmatrix matrix) {int width = matrix.getWidth (); int Höhe = matrix.getheight (); Bufferedimage image = new bufferedImage (width, Höhe, bufferedimage.type_int_rgb); für (int x = 0; x <width; x ++) {für (int y = 0; y <Höhe; y ++) {image.setRGB (x, y, matrix.get (x, y)? schwarz: weiß); }} return Image; } public static void writeToFile (Bitmatrix matrix, String -Format, Dateidatei) löscht IOException {bufferedImage image = tobufedImage (matrix); if (! imageio.write (Bild, Format, Datei)) {Neue IOException ("konnte ein Bild des Formats nicht schreiben" + Format + "to" + Datei); }} public static void writeToStream (Bitmatrix matrix, String -Format, Ausgabestream) löscht IOException {bufferedImage image = tobuffeedImage (matrix); if (! imageio.write (Bild, Format, Stream)) {Neue IOException ("konnte kein Bild des Formats schreiben" + Format); }}}Jetzt können Sie das Root -Verzeichnis der D -Datenträger herunterladen, um den generierten QR -Code anzuzeigen
QR -Codeanalyse
Wie die Generation benötigen wir eine Hilfsklasse (BufferedImageluminancesource), die ebenfalls von Google bereitgestellt wird. Hier füge ich auch den Quellcode dieser Klasse ein und kann ihn direkt kopieren und verwenden, um die Probleme der Suche zu speichern.
BufferedImageluminancesource import com.google.zxing.luminancesource; Import Java.awt.Graphics2d; import Java.awt.geom.Affinetransform; Import Java.awt.image.BuffenedImage; Public Final Class BufferedImageluminancesource erweitert Luminancesource {Private Final BufferedImage Image; privates Finale int gelassen; Private Final INT Top; public bufferedImageluminancesource (bufferedimage Bild) {this (Bild, 0, 0, Image.getWidth (), Image.Getheight ()); } public bufferedImageluminancesource (bufferedImage -Bild, int links, int oben, int Breite, int Höhe) {Super (Breite, Höhe); int sourcewidth = image.getWidth (); int SourceHeight = Image.Getheight (); if (links + width> SourceWidth || Top + Höhe> SourceHeight) {Wirf neu illegalArgumentException ("Crop -Rechteck passt nicht in Bilddaten."); } für (int y = top; y <top+Höhe; y ++) {für (int x = links; x <links+width; x ++) {if ((image.getRGB (x, y) & 0xff0000000000000000) {image.setrgb (x, y, 0xffffffff); // = weiß}}} this.image = new bufferedImage (SourceWidth, SourceHeight, BufferedImage.Type_Byte_Gray); this.image.getGraphics (). DrawImage (Bild, 0, 0, null); this.left = links; this.top = top; } @Override public byte [] getRow (int y, byte [] row) {if (y <0 || y> = getheight ()) {neue IllegalArgumentException ("angeforderte Zeile ist außerhalb des Bildes:" + y); } int width = getwidth (); if (row == null || row.length <width) {row = new byte [width]; } image.getRaster (). getDataelements (links, oberst + y, width, 1, row); Rückreihe; } @Override public byte [] getMatrix () {int width = getWidth (); int Höhe = getheight (); int Bereich = Breite * Höhe; byte [] matrix = new Byte [Bereich]; Image.getRaster (). getDataElements (links, oben, Breite, Höhe, Matrix); MATRIX RETURN; } @Override public boolean iscropsupported () {return true; } @Override public luminancesource crop (int links, int top, int width, int lhohe) {return New bufferedImageluminancesource (Bild, this.left + links, this.top + top, width, Höhe); } @Override public boolean isRotateSupported () {return true; } @Override public luminancesource rotateCounterClockwise () {int SourceWidth = image.getWidth (); int SourceHeight = Image.Getheight (); Affinetransform -Transformation = Neue Affinetransform (0,0, -1,0, 1,0, 0,0, 0,0, Quellbreite); BufferedImage rotatedImage = new bufferedImage (SourceHeight, SourceWidth, BufferedImage.Type_Byte_Gray); Graphics2d g = rotatedImage.createGraphics (); G.Drawimage (Bild, Transformation, NULL); g.disponse (); int width = getwidth (); Rückgabe neuer BufferedImageluminancesource (RotatedImage, oben, Quellbreite - (links + Breite), Getheight (), Breite); }}Code zum Analyse des QR -Code
MultiformatReader formatReader = new MultiformatReader (); String filepath = "Pfad des Bildes"; Datei Datei = neue Datei (FilePath); Bufferedimage image = imageio.read (Datei) ;; Luminancesource Source = New BufferedImageluminancesource (Bild); Binarizer Binarizer = neuer Hybridbinarisator (Quelle); Binarybitmap binarybitmap = new Binarybitmap (Binarizer); MAP Hins = new HashMap (); Hints.put (EncodehintType.character_set, "utf-8"); Ergebnis result = formatReader.decode (Binarybitmap, Hinweise); System.out.println ("result ="+ result.toString ()); System.out.println ("resultFormat ="+ result.getBarcodeFormat ()); System.out.println ("resultText ="+ result.getText ()); tch (Ausnahme e) {e.printstacktrace ();Auf diese Weise können Sie den Inhalt des QR -Codes auf der Konsole sehen.
Das obige ist das relevante Wissen darüber, wie QR-Codes durch Zxing-Core generiert und analysiert werden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!