Los códigos QR están en todas partes, y puede escanearlo y obtendrá regalos. Los códigos QR son tan populares ahora. Creo que todos no tienen mucho claro cómo se generan los códigos QR. Ahora, el editor compartirá con usted el método de ayudarlo a aprender el método de generación de código QR compartiendo este artículo.
De hecho, esta función se usa principalmente mediante el uso del JAR publicado por Goggle.
1. Generación de código QR
Agregue el paquete Zxing-Core.jar a ClassPath.
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.
Un código que puede generar directamente un código QR
public void test1 () lanza la excepción {String content = "www.baidu.com"; Ruta de cadena = "d: //"; MultiformAtWriter MultiformAtWriter = new MultiformAtWriter (); // Zxing es un código de barras proporcionado por Google. Sugerencias de mapas = new HashMap (); hints.put (encodeHintType.character_set, "UTF-8"); BitMatrix bitMatrix = multiformatwriter.enCode (content, barcodeFormat.qr_code, 400, 400, sugerencias); // Este es el tamaño del archivo de archivo de foto1 = nuevo archivo (ruta, "my.jpg"); MatrixteoImageWriter.WriteToFile (bitMatrix, "jpg", file1); System.out.println ("Ejecución completada"); }Cuando podemos encontrar eso después de copiar este código, descubrimos que había un error informado por un escritor matrixteoimage, por lo que debemos buscarlo, pero publiqué el código aquí y puede ser usado 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); }}}Ahora puede descargar el directorio raíz del disco D para ver el código QR generado
Análisis de código QR
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); }}Código para analizar el código QR
Multiformatreader formatReader = new MultiformAtreader (); Cadena filepath = "ruta de la imagen"; 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 ()); tch (excepción e) {E.PrintStackTrace ();Ahora, de esta manera, puede ver el contenido del código QR en la consola.
Lo anterior es el conocimiento relevante sobre cómo generar códigos QR mediante el núcleo zxing y analizándolos. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!