El código QR es una imagen de código de barras que utiliza figuras geométricas de plano blanco y negro para grabar texto, imágenes, URL y otra información a través de los algoritmos de codificación correspondientes. La siguiente figura
Características del código QR:
1. Codificación de alta densidad, gran capacidad de información
Puede acomodar hasta 1850 letras mayúsculas o 2710 números o 1108 bytes, o más de 500 caracteres chinos, que es aproximadamente docenas de veces más que la información de código de barras ordinaria.
2. Amplio rango de codificación
Este código de barras puede codificar información digitalizada como imágenes, sonidos, textos, firmas, huellas digitales, etc., y expresarlas en códigos de barras; Pueden representar el texto en múltiples idiomas; y pueden representar datos de imagen.
3. Función de tolerancia a fallas y corrección de errores fuertes
Esto permite que el código de barras bidimensional se dañe correctamente debido a la perforación, el fallecimiento, etc., y la información aún se puede recuperar si el área de daños alcanza el 50%.
4. Alta fiabilidad de decodificación
Es mucho más baja que la tasa de error de la decodificación de código de barras ordinarios de dos parejas por millón, y la tasa de error no es más de unas pares por millón.
5. Se pueden introducir medidas de cifrado
Buena confidencialidad y anti-cuenta.
6. Bajo costo, fácil de hacer, duradero
Debido a las características anteriores, los códigos QR se están volviendo cada vez más populares y se usan más ampliamente (ver Enciclopedia de Baidu para más detalles, la introducción no es el foco de este artículo). Por lo tanto, dominar cómo desarrollar códigos QR es una muy buena reserva de conocimiento. Por lo tanto, este artículo le explicará cómo generar y analizar los códigos QR.
1. Java
Paquete JAR requerido: qrcode.jar
http://sourceforge.jp/projects/qrcode/
TwodimensionCode Clase: clase de operación de código QR Core Clase
paquete qrcode; import java.awt.color; import java.awt.graphics2d; import java.awt.image.bufferedImage; import java.io.file; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import javax.image.imageio; jp.sourceforge.qrcode.qrcodeDeCoder; import jp.sourceforge.qrcode.exception.DecodingFailedException; import com.swetake.util.qrcode; public class twodimensionCode { / *** Generar el código Qr (Qrcode) imagen* @param Content Content* @Param IMG IMGPT encoderqrcode (string content, string imgpath) {this.encoderqrCode (content, imgpath, "png", 7); } / *** Generar el código QR (QRCode) imagen* @param Content Store Content* @param salida de salida flujo* / public void encoderqrcode (contenido de cadena, salida de salida) {this.EncoderQrCode (contenido, salida, "PNG", 7); } / *** Generar el código QR (QRCode) Imagen* @param Content Store Content* @param imgpath ruta de imagen* @param imgtype tipo de imagen* / public void encoderqrcode (string content, string imgpath, string imgtype) {this.encoderqrCode (contenido, imgpath, imgtype, 7); } / *** Generar el código QR (Qrcode) imagen* @param Content Store Content* @param salida de salida flujo* @param imgtype type de imagen* / public void encoderqrcode (contenido de cadena, salida de salida, salida, cadena imgType) {this.encoderqrCode (contenido, salida, imgType, 7); } / *** Generar el código QR (QRCode) Imagen* @param Content Store Content* @param imgpath ruta de imagen* @param imgtype type de imagen* @param size qr código size* / public void encoderqrcode (cadena contenido, string imgType, int size) {intit {buffeDimage bUfimg = this.qrcodeCom imgtype, tamaño); Archivo imgfile = nuevo archivo (imgpath); // Generar código QR QRCode Image ImageIO.Write (BufiMg, IMGType, IMGFile); } catch (Exception e) {E.PrintStackTrace (); }} / *** Generar el código QR (QRCode) Imagen* @param Content Store Content* @param Salida de salida SEMTRAN tamaño); // Generar código QR QRCode Image ImageIO.Write (BufiMg, imgType, Output); } catch (Exception e) {E.PrintStackTrace (); }} / *** Método público para generar código QR (QRCode) Imágenes* @param Content Store Content* @param imgtype Tipo de imagen* @param size QR Size* @return* / private BufferedImage QrCodeComon (String Content, String imgtype, int tize) {BufferedImage BufiMg = null; intente {qrcode qrcodeHandler = new Qrcode (); // Establezca la tasa de error del código QR, que se puede seleccionar como L (7%), M (15%), Q (25%) y H (30%). Cuanto mayor sea la tasa de error, menos información se puede almacenar, pero menor será el requisito de la claridad del código QR QRCodeHandler.setqrCodeErrorCorrect ('M'); qrcodeHandler.setqrCodeEncodeMode ('b'); // Establecer el tamaño del código QR, con un rango de valor de 1-40. Cuanto mayor sea el valor, mayor es el tamaño, mayor será la información que puede almacenar qrcodeHandler.setqrCodeversion (tamaño); // Obtenga la matriz de contenido de bytes y establezca el formato de codificación byte [] contentBytes = content.getBytes ("UTF-8"); // tamaño de imagen int imgSize = 67 + 12 * (tamaño - 1); bufimg = new BufferedImage (imgSize, imgSize, BufferedImage.Type_int_rgb); Graphics2d gs = bufimg.createGraphics (); // establecer el color de fondo gs.setbackground (color.white); Gs.ClearRect (0, 0, imgsize, imgSize); // establecer color de imagen> negro gs.setcolor (color.black); // Establecer compensación, no la configuración puede causar errores de análisis int pixoff = 2; // Salida Contenido> Código QR if (ContentBytes.length> 0 && ContentBytes.length <800) {boolean [] [] codeOut = qrcodeHandler.calqrcode (ContentBytes); for (int i = 0; i <codeOut.length; i ++) {for (int j = 0; j <codeOut.length; j ++) {if (codeOut [j] [i]) {gs.fillrect (j * 3+pixoff, i * 3+pixoff, 3, 3); }}}} else {Throw New Exception ("QRCode Content Bytes longitud =" + ContentBytes.length + "No en [0, 800]."); } gs.dispose (); bufimg.flush (); } catch (Exception e) {E.PrintStackTrace (); } return bufiMg; } / ** * Analizar el código QR (qrcode) * @param imgpath ruta de imagen * @return * / public string decoderqrcode (string imgpath) {// qrcode qr código de código archivo archivo imageFile = nuevo archivo (imgpath); BufferedImage bufiMg = nulo; String content = null; intente {bufiMg = imageIO.read (ImageFile); QrCodEdecoder decoder = new QrCodeDeCoder (); content = new String (decoder.decode (new twodimensionCodeImage (bufiMg)), "UTF-8"); } catch (ioException e) {System.out.println ("Error:" + E.getMessage ()); E.PrintStackTrace (); } Catch (decodingfailedException dfe) {system.out.println ("error:" + dfe.getMessage ()); dfe.printstacktrace (); } contenido de retorno; } / ** * PARSING CÓDIGO QR (QRCODE) * @Param Entrada de entrada Stream * @return * / public String decoderqrCode (inputStream Entry) {BufferedImage bufiMg = null; String content = null; intente {bufiMg = imageIO.read (entrada); QrCodEdecoder decoder = new QrCodeDeCoder (); content = new String (decoder.decode (new twodimensionCodeImage (bufiMg)), "UTF-8"); } catch (ioException e) {System.out.println ("Error:" + E.getMessage ()); E.PrintStackTrace (); } Catch (decodingfailedException dfe) {system.out.println ("error:" + dfe.getMessage ()); dfe.printstacktrace (); } contenido de retorno; } public static void main (string [] args) {string imgpath = "g: /tddownload/michael_qrcode.png"; String EncoderContent = "Hola Big, ¡pequeño, Bienvenido a QRCode!" + "/nmyblog [http://sjsky.iteye.com]" + "/nemail [[email protected]]"; TwodimensionCode Handler = new twodimensionCode (); handler.encoderqrCode (encoderContent, imgpath, "png"); // try {// outputStream output = new FileOutputStream (imgpath); // handler.encoderqrcode (content, output); //} Catch (excepción e) {// e.printstackTrace (); //} System.out.println ("============== EXCELARIO DE CODER"); String decodercontent = handler.decoderqrcode (imgpath); System.out.println ("El resultado de análisis es el siguiente:"); System.out.println (decodercontent); System.out.println ("============ ¡éxito del decodificador!"); }}TwodimensionCodeImage Clase: objeto de imagen de código QR
paquete qrcode; import java.awt.image.bufferedImage; import jp.sourceforge.qrcode.data.qrcodeImage; clase pública twodimensionCodeImage implementa qrcodeimage {bufferedimage bufiMg; public twodimensionCodeImage (BufferedImage bufiMg) {this.bufimg = bufiMg; } @Override public int getheight () {return bufimg.getheight (); } @Override public int getPixel (int x, int y) {return bufiMg.getRgb (x, y); } @Override public int getWidth () {return bufiMg.getWidth (); }}Lo anterior es la información para la generación y análisis de los códigos Java QR. Continuaremos agregándolos más tarde. ¡Gracias por su apoyo para este sitio web!