Java实现二维码QRCode的编码和解码

试用下Android手机的二维码扫描软件,扫描了下火车票、名片等等,觉得非常不错很有意思的。当然Java也可以实现这些,现在就分享下如何简单用Java实现二维码中QRCode的编码和解码(可以手机扫描验证)。

涉及到的一些主要类库,方便大家下载:

编码 lib:Qrcode_swetake.jar   (官网介绍 --
解码 lib:qrcode.jar            (官网介绍 --

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/8月/16日/Java实现二维码QRCode的编码和解码

后来发现一个更好的条形码和二维码的开源软件(ZXing),详细介绍见:

【一】、编码:

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;       /**    * 二维码生成器    * @blog     * @author Michael    */   public class QRCodeEncoderHandler {           /**        * 生成二维码(QRCode)图片        * @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(140140,                        BufferedImage.TYPE_INT_RGB);                   Graphics2D gs = bufImg.createGraphics();                   gs.setBackground(Color.WHITE);                gs.clearRect(00140140);                   // 设定图像颜色 > BLACK                gs.setColor(Color.BLACK);                   // 设置偏移量 不设置可能导致解析出错                int pixoff = 2;                // 输出内容 > 二维码                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, 33);                            }                        }                    }                } else {                    System.err.println("QRCode content bytes length = "                           + contentBytes.length + " not in [ 0,120 ]. ");                }                   gs.dispose();                bufImg.flush();                   File imgFile = new File(imgPath);                   // 生成二维码QRCode图片                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 大大、小小,welcome to QRCode!"                   + "\nMyblog [  ]"                   + "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]";               QRCodeEncoderHandler handler = new QRCodeEncoderHandler();            handler.encoderQRCode(content, imgPath);               System.out.println("encoder QRcode success");        }    }  

运行后生成的二维码图片如下:

Java实现二维码QRCode的编码和解码

此时就可用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:

Java实现二维码QRCode的编码和解码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/652f866c439e7eab94718e31bf352238.html