Java implements encoding and decoding of QR code QRCode
Some of the main class libraries involved are convenient for everyone to download:
Code lib: Qrcode_swetake.jar (Official website introduction-- http://www.swetake.com/qr/index-e.html)
Decode lib: qrcode.jar (Official website introduction-- http://sourceforge.jp/projects/qrcode/)
【1】Coding:
Java code QRCodeEncoderHandler.java
package michael.qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; /** * QR code generator* @blog http://sjsky.iteye.com * @author Michael */ public class QRCodeEncoderHandler { /** * Generate QR code (QRCode) image* @param content * @param imgPath */ public void encoderQRCode(String content, String imgPath) { try { Qrcode qrcodeHandler = new Qrcode(); qrcodeHandler.setQrcodeErrorCorrect('M'); qrcodeHandler.setQrcodeEncodeMode('B'); qrcodeHandler.setQrcodeVersion(7); System.out.println(content); byte[] contentBytes = content.getBytes("gb2312"); BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufImg.createGraphics(); gs.setBackground(Color.WHITE); gs.clearRect(0, 0, 140, 140); // Set image color> BLACK gs.setColor(Color.BLACK); // Set offset not to set may cause parsing error int pixoff = 2; // Output content> QR code if (contentBytes.length > 0 && contentBytes.length < 120) { 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 { System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. "); } gs.dispose(); bufImg.flush(); File imgFile = new File(imgPath); // Generate QR code QRCode image ImageIO.write(bufImg, "png", imgFile); } catch (Exception e) { e.printStackTrace(); } } /** * @param args the command line arguments */ public static void main(String[] args) { String imgPath = "D:/test/twocode/Michael_QRCode.png"; String content = "Hello big, small, welcome to QRCode!" + "/nMyblog [ http://sjsky.iteye.com ]" + "/nEMail [ [email protected] ]" + "/nTwitter [ @suncto ]"; QRCodeEncoderHandler handler = new QRCodeEncoderHandler(); handler.encoderQRCode(content, imgPath); System.out.println("encoder QRcode success"); } }The QR code image generated after running is as follows:
At this time, you can use the QR code scanning software on your mobile phone (I use: Android Story QR code) to test it. The screenshots of the successful identification are as follows:
Friends who like it can download it and try it out, and make some business cards or things they like. Of course, Java can also decode QR code images, please see the following content about decoding.
【2】Decoding:
Java code QRCodeDecoderHandler.java
package michael.qrcode; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.data.QRCodeImage; import jp.sourceforge.qrcode.exception.DecodingFailedException; /** * @blog http://sjsky.iteye.com * @author Michael */ public class QRCodeDecoderHandler { /** * Decode QR code* @param imgPath * @return String */ public String decoderQRCode(String imgPath) { // QRCode QR code image file File imageFile = new File(imgPath); BufferedImage bufImg = null; String decodedData = null; try { bufImg = ImageIO.read(imageFile); QRCodeDecoder decoder = new QRCodeDecoder(); decodedData = new String(decoder.decode(new J2SEImage(bufImg))); // try { // System.out.println(new String(decodedData.getBytes("gb2312"), // "gb2312")); // } catch (Exception e) { // // TODO: handle exception // } } catch (IOException e) { System.out.println("Error: " + e.getMessage()); e.printStackTrace(); } catch (DecodingFailedException dfe) { System.out.println("Error: " + dfe.getMessage()); dfe.printStackTrace(); } return decodedData; } /** * @param args the command line arguments */ public static void main(String[] args) { QRCodeDecoderHandler handler = new QRCodeDecoderHandler(); String imgPath = "d:/test/twocode/Michael_QRCode.png"; String decoderContent = handler.decoderQRCode(imgPath); System.out.println("The parsing result is as follows:"); System.out.println(decoderContent); System.out.println("============ decoder success!!!"); } class J2SEImage implements QRCodeImage { BufferedImage bufImg; public J2SEImage(BufferedImage bufImg) { this.bufImg = bufImg; } public int getWidth() { return bufImg.getWidth(); } public int getHeight() { return bufImg.getHeight(); } public int getPixel(int x, int y) { return bufImg.getRGB(x, y); } } }The running results are as follows (the decoded content is consistent with the previously entered content):
The analysis results are as follows:
Hello Big, small, welcome to QRCode!
Myblog [ http://sjsky.iteye.com ]
EMail [ [email protected] ]
Twitter [ @suncto ]
=========== decoder success!!!
The above is the collection of the encoding and decoding of the Java QR code QRCode. We will continue to add relevant information in the future. Thank you for your support for this site!