ZXing es una herramienta de análisis sobre códigos de barras (código One-R, código QR) proporcionada por Google. Proporciona métodos para generar y analizar códigos QR. Ahora introduciré brevemente el uso de Java para generar y analizar los códigos QR utilizando ZXing.
1. Generación de código QR
1.1 Agregue el paquete Zxing-Core.jar a classpath.
1.2 La generación de código QR requiere la ayuda de la clase MatriMmoImageWriter. Esta clase es proporcionada por Google. Puede copiar la clase al código fuente. Aquí pego el código fuente de esta clase y se puede usar directamente.
import com.google.zxing.common.bitmatrix; import javax.imageio.imageio; import java.io.file; import java.io.outputstream; import java.io.ioException; import java.awt.image.bufferedImage; Public Final Class MatriXteoImageWriter {private static final int Black = 0xff000000; privado estático final int white = 0xffffffff; privado matriMmoImageWriter () {} public static bufferedImage TobufferedImage (BitMatrix Matrix) {int width = matrix.getWidth (); int hight = matrix.getheight (); Bufferedimage imagen = nueva bufferedimage (ancho, altura, bufferedimage.type_int_rgb); for (int x = 0; x <width; x ++) {for (int y = 0; y <height; y ++) {image.setrgb (x, y, matrix.get (x, y)? negro: blanco); }} imagen de retorno; } public static void writeToFile (BitMatrix Matrix, String Format, File File) lanza IOException {BufferedImage Image = TobufferedImage (matriz); if (! imageio.write (imagen, formato, archivo)) {throw new ioException ("no podría escribir una imagen de formato" + formato + "a" + archivo); }} public static void writeToStream (matriz de bitmatrix, formato de cadena, transmisión de salida) lanza ioexception {bufferedImage image = tobufferedImage (matriz); if (! ImageIO.Write (Image, Format, Stream)) {Throw New IoException ("No se pudo escribir una imagen de formato" + formato); }}}1.3 Código de implementación de escritura que genera código QR
Pruebe {String Content = "120605181003; http: //www.cnblogs.com/jtmjx"; String path = "c:/users/administrador/escritorio/testimage"; MultiformAtWriter MultiformAtWriter = new MultiformAtWriter (); Sugerencias de mapas = new HashMap (); hints.put (encodeHintType.character_set, "UTF-8"); BitMatrix bitMatrix = MultiformAtWriter.Encode (content, BarcodeFormat.qr_code, 400, 400, sugerencias); Archivo file1 = nuevo archivo (ruta, "nambeginner.jpg"); MatrixteoImageWriter.WriteToFile (bitMatrix, "jpg", file1); } catch (Exception e) {E.PrintStackTrace (); }Ahora, después de ejecutar, puede generar una imagen de código QR. ¿No es muy simple? A continuación, echemos un vistazo a cómo analizar el código QR
2. Análisis del código QR
2.1 Agregue el paquete Zxing-Core.jar a classpath.
2.2 Al igual que la generación, necesitamos una clase auxiliar (BufferedImageLuminancesource), que también proporciona Google. Aquí también pego el código fuente de esta clase y puedo copiarlo y usarlo directamente, guardando el problema de buscar.
BufferedimageLuminancesource import com.google.zxing.luminancesource; import java.awt.graphics2d; import java.awt.geom.affinetransform; import java.awt.image.bufferedImage; Public Final Clase BufferedImageluminancesource extiende Luminancesource {Imagen de BufferedImage de Buffered Final Private; Final privado int; Private final int top; Public BufferedImageLuminancesource (Imagen de BufferedImage) {this (Image, 0, 0, Image.getWidth (), Image.Getheight ()); } public BufferedImageLuminancesource (Imagen de BufferedImage, int Left, int top, int width, int altura) {super (ancho, altura); int SourceWidth = image.getWidth (); int SourceHeight = image.getheight (); if (izquierda + ancho> SourceWidth || top + altura> fuente) {tirar nueva ilegalargumentException ("El rectángulo de cultivo no se ajusta dentro de los datos de la imagen"); } for (int y = top; y <top+hightight; y ++) {for (int x = izquierda; x <izquierda+width; x ++) {if ((image.getrgbb (x, y) & 0xff000000) == 0) {image.setrgb (x, y, 0xffffffff); // = blanco}}} this.image = new BufferedImage (SourceWidth, SourceHeight, BufferedImage.Type_Byte_Gray); this.image.getGraphics (). DrawImage (imagen, 0, 0, nulo); this.left = izquierda; this.top = top; } @Override public byte [] getrow (int y, byte [] fila) {if (y <0 || y> = getheight ()) {tirar nueva ilegalArgumentException ("La fila solicitada está fuera de la imagen:" + y); } int width = getWidth (); if (fila == null || row.length <width) {row = new byte [width]; } image.getRaster (). getDataelements (izquierda, superior + y, ancho, 1, fila); Fila de retorno; } @Override public byte [] getMatrix () {int width = getWidth (); int altura = getheight (); área int = ancho * altura; byte [] matriz = nuevo byte [área]; image.getRaster (). getDataelements (izquierda, arriba, ancho, altura, matriz); Matriz de retorno; } @Override public boolean isCropsupported () {return true; } @Override public luminancesource cultivo (int izquierdo, int top, int width, int altura) {return new BufferedImageLuminancesource (imagen, this.left + izquierda, this.top + top, ancho, altura); } @Override public boolean isrotatesupported () {return true; } @Override public Luminancesource RotateCounterClockWise () {int SourceWidth = Image.getWidth (); int SourceHeight = image.getheight (); Affinetransform Transform = new 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 (imagen, transformación, nulo); G.Dispose (); int width = getwidth (); devolver nuevo bufferedimageLuminancesource (RotatedImage, arriba, fuente de origen - (izquierda + ancho), getheight (), ancho); }}2.3 Escribir código de implementación que analiza el código QR
intente {MultiformAtreader formatReader = new MultiformAtreader (); Cadena filepath = "c: /users/administrator/desktop/testimage/test.jpg"; Archivo archivo = nuevo archivo (filepath); Bufferedimage image = imageIO.read (archivo) ;; Luminancesource Source = new BufferedImageLuminancesource (imagen); Binarizer binarizer = new HybridBinarizer (fuente); BinaryBitMap BinaryBitMap = New BinaryBitMap (binarizer); Sugerencias de mapas = new HashMap (); hints.put (encodeHintType.character_set, "UTF-8"); Resultado de resultado = formatReader.Decode (binaryBitMap, sugerencias); System.out.println ("result ="+ resultado.toString ()); System.out.println ("resultFormat ="+ resultado.getBarCodeFormat ()); System.out.println ("resultext ="+ resultado.gettext ()); } catch (Exception e) {E.PrintStackTrace (); }Ahora, después de ejecutar, puede ver que la consola imprime el contenido del código QR.
Hasta ahora, Zxing usó ZXing para generar y analizar el código QR y se completó la demostración, principalmente haciendo memorandos para usted y al mismo tiempo para la conveniencia de los necesitados. ¡Jeje!
El ejemplo simple anterior de Java usando ZXing para generar códigos QR es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.