O código QR é uma imagem de código de barras que usa figuras geométricas de plano preto e branco para gravar texto, imagens, URLs e outras informações através de algoritmos de codificação correspondentes. A figura a seguir
Recursos do código QR:
1. Codificação de alta densidade, grande capacidade de informação
Ele pode acomodar até 1850 letras maiúsculas ou 2710 números ou 1108 bytes, ou mais de 500 caracteres chineses, o que é cerca de dezenas de vezes maior que as informações comuns de código de barras.
2. Faixa de codificação de largura
Este código de barras pode codificar informações digitalizadas, como imagens, sons, textos, assinaturas, impressões digitais, etc., e expressá -las em códigos de barras; Eles podem representar texto em vários idiomas; e eles podem representar dados de imagem.
3. Forte de tolerância a falhas e função de correção de erros
Isso permite que o código de barras bidimensional seja danificado adequadamente devido a perfuração, contaminação, etc., e as informações ainda poderão ser recuperadas se a área de danos atingir 50%.
4. Alta confiabilidade de decodificação
É muito menor que a taxa de erro da decodificação comum de código de barras de dois partes por milhão, e a taxa de erro não passa de um parceiro por milhão.
5. As medidas de criptografia podem ser introduzidas
Boa confidencialidade e anti-concorrência.
6. baixo custo, fácil de fazer, durável
Devido às características acima, os códigos QR estão se tornando cada vez mais populares e são mais amplamente utilizados (consulte a Enciclopédia Baidu para obter detalhes, a introdução não é o foco deste artigo). Portanto, dominar como desenvolver códigos QR é uma reserva de conhecimento muito boa. Portanto, este artigo explicará como gerar e analisar códigos QR.
1. Java
Pacote de jar exigido: qrcode.jar
http://sourceforge.jp/projects/qrcode/
Classe TwodimensionCode: QR Operação Classe Classe Class
package 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.imageio.ImageIO;import jp.sourceforge.qrcode.qrcodedecoder; import jp.sourceforge.qrcode.exception.DecodingFailedException; importar com.swetake.util.qrcode; classe pública twodimensionCode { / *** GERE o código QR (QR)**** coderqrcode (conteúdo da string, string imgpath) {this.encoderqrcode (content, imgpath, "png", 7); } / *** Gere o código QR (QRCODE)* @Param Content Store Content* @Param Output Stream de saída* / public void coderqrcode (conteúdo da String, saída de saída de saída) {this.Encoderqrcode (conteúdo, saída, "png", 7); } / *** Gere o código QR (QRCODE)* @Param Content Store Content* @param imgpath picting path* @param imgtype tipo de imagem* / public void coderqrcode (String Content, string imgpath, string imgtype) {this.encoderqrcode (contentpath, imgtype, imgtype) {this.encoderqrcode (contentpath, imgtype, imgtype), } / *** Gere o código QR (QRCODE)* @Param Content Store Content* @param fluxo de saída de saída* @param imgtype Tipo de imagem* / public void coderqrcode (conteúdo de string, saída de saída, string imgtype) {this.Encoderqrcode (saída, saída, imgtype, 7); } / *** Gere o código QR (qrcode)* @Param Content Store Content* @Param IMGPath Caminho da imagem* @param imgtype Tipo de imagem* @param tamanho QR Tamanho do código* / public void coderqrCode (String content, string imgpath, string thisgtype, int size) {Trym {CufferEdImage tamanho); Arquivo imgfile = novo arquivo (imgpath); // gerar código QR qrcode Image Imageio.write (bufimg, imgtype, imgfile); } catch (Exceção e) {e.printStackTrace (); }} / *** Gere o código QR QR (QRCODE) Imagem* @Param Content Store Content* @Param Stream de saída de saída* @param imgtype Tipo de imagem* @param tamanho QR Tamanho do código* / public void EncoderQrCode (String content, saída de saída, saída IMGTYPE, Int Tamanho) {Trym {CufferEdImage tamanho); // gerar código QR QRCode Imageio.Write (bufimg, imgtype, saída); } catch (Exceção e) {e.printStackTrace (); }} / *** Método público para gerar código QR (QRCode) imagens* @param Content Store Content* @param imgtype Tipo de imagem* @param tamanho QR Tamanho do código* @return* / Private BufferImage qrcodecommon (String Content, string imgtype, int size) {bufferImage bufimpe tente {qrcode qrcodeHandler = new Qrcode (); // Defina a taxa de erro de código QR, que pode ser selecionada como L (7%), M (15%), Q (25%) e H (30%). Quanto maior a taxa de erro, menos informações poderão ser armazenadas, mas menor o requisito para o QR CHARADE CLARIDO QRCODEHANDLER.SETQRCODEERRorCorrect ('M'); qrcodeHandler.SetQRCodeEncodemode ('B'); // Defina o tamanho do código QR, com um intervalo de valor de 1-40. Quanto maior o valor, maior o tamanho, maior a informação você pode armazenar qrcodeHandler.SetqrCodeversion (tamanho); // Obtenha a matriz de conteúdo de bytes e defina o formato de codificação byte [] contentBytes = Content.getBytes ("UTF-8"); // Tamanho da imagem int imgSize = 67 + 12 * (tamanho - 1); bufimg = new bufferImage (imgsize, imgsize, bufferImage.type_int_rgb); Graphics2d gs = bufimg.creategraphics (); // Definir cor de fundo GS.SetBackground (color.white); gs.clearrect (0, 0, imgsize, imgsize); // Defina a cor da imagem> GS.SetColor preto (color.black); // defina deslocamento, não a configuração pode causar erros de análise int pixoff = 2; // output Content> Código QR if (ContentBytes.Length> 0 && ContentBytes.Length <800) {boolean [] [] codeout = qrcodeHandler.calqrcode (contentBytes); para (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 {lança nova exceção ("QRCode Content bytes comprimento =" + contentBytes.length + "não em [0, 800]."); } gs.dispose (); bufimg.flush (); } catch (Exceção e) {e.printStackTrace (); } retornar bufimg; } / ** * Analise o código QR (QRCODE) * @PARAM IMGPath Image Path * @RETURN * / public String Decoderqrcode (String imgPath) {// QRCode QR Código Imagem Arquivo ImageFile = new File (IMGPath); BufferImage bufimg = null; String content = null; tente {bufimg = imageio.read (imagefile); Qrcodedecoder decodificador = 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 (); } retornar conteúdo; } / ** * Analisando o código QR (QRCODE) * @PARAM Entrada de entrada fluxo de entrada * @return * / public String decoderqrcode (entrada inputStream) {bufferImage bUFIMG = null; String content = null; tente {bufimg = imageio.read (entrada); Qrcodedecoder decodificador = 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 (); } retornar conteúdo; } public static void main (string [] args) {string imgpath = "g: /tddownload/michael_qrcode.png"; String coderContent = "Olá, grande, pequeno, bem -vindo ao qrcode!" + "/nmyblog [http://sjsky.iteye.com]" + "/nemail [[email protected]]"; TwodimensionCode manipulador = new twodimensionCode (); Handler.Encoderqrcode (EncoderContent, imgPath, "png"); // try {// outputStream Output = new FileOutputStream (imgPath); // Handler.Encoderqrcode (Content, output); //} catch (Exception e) {//.PrintStackTrace (); System.out.println ("============= Sucesso do codificador"); String decoderContent = Handler.Decoderqrcode (imgPath); System.out.println ("O resultado da análise é o seguinte:"); System.out.println (decodicontent); System.out.println ("============ Sucesso do decodificador !!!"); }}TwodimensionCodeImage Classe: Objeto de imagem de código QR
pacote qrcode; importar java.awt.image.bufferiMage; importar jp.sourceforge.qrcode.data.qrcodeImage; classe pública twodimensionCodeImage implementa QRCodeImage {bufferImage bufimg; public twodimensionCodeImage (bufferImage 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 (); }}O exposto acima são as informações para a geração e análise dos códigos Java QR. Continuaremos a adicioná -los mais tarde. Obrigado pelo seu apoio a este site!