Java生成二维码

来源:互联网 发布:linux基础知识总结 编辑:程序博客网 时间:2024/04/30 15:12

为了庆祝明天和这不成器的好产品,写上这Java生成的二维码!这里生成的二维码所使用的jar是为qrcode!具体资源的下载路径:http://download.csdn.net/download/luo201227/7130951(包含了代码和jar包),好啦。直接上代码:

一、[编码]

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;/** * @Description: 编码器 * * @ClassName: QRCodeEncoderHandler * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-2-11 下午01:57:47 * @version V2.0 */public class QRCodeEncoderHandler {        /**     * @Description: 生成二维码(QRCode)图片      *     * @param content 二维码内容     * @param imgPath 二维码存放路径     *     * @Title: QRCodeEncoderHandler.java     * @Copyright: Copyright (c) 2014     *     * @author Comsys-LZP     * @date 2014-2-11 下午03:54:18     * @version V1.0     * @throws Exception      */    public void encoderQRCode(String content, String imgPath) throws Exception {        // 处理异常        try {             // 实例化对象            Qrcode qrcodeHandler = new Qrcode();             // 设置            qrcodeHandler.setQrcodeErrorCorrect('M');             qrcodeHandler.setQrcodeEncodeMode('B');             qrcodeHandler.setQrcodeVersion(7);                         // 二维码内容转换            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);             // 设定图像颜色> 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, 3, 3);                         }                     }                 }             } else {                throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");            }             gs.dispose();             bufImg.flush();                         // 二维码文件对象            File imgFile = new File(imgPath);                         // 判断是否存在            if(!imgFile.exists()){                // 不存在,先进行创建                imgFile.mkdirs();            }            // 生成二维码QRCode图片             ImageIO.write(bufImg, "png", imgFile);         } catch (Exception e) {            throw new Exception("Error:" + e.getMessage());        }     }}


二、[解码]

import java.awt.image.BufferedImage;import java.io.File;import javax.imageio.ImageIO;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.data.QRCodeImage;/** * @Description: 解码器 * * @ClassName: QRCodeDecoderHandler * @Copyright: Copyright (c) 2014 * * @author Comsys-LZP * @date 2014-2-11 下午02:51:55 * @version V1.0 */public class QRCodeDecoderHandler {    /**     * @Description: 解码二维码      *     * @param imgPath 二维码图片文件路径     * @return 解码内容     *     * @Title: QRCodeDecoderHandler.java     * @Copyright: Copyright (c) 2014     *     * @author Comsys-LZP     * @date 2014-2-11 下午03:44:04     * @version V1.0     * @throws Exception      */    public String decoderQRCode(String imgPath) throws Exception {         // QRCode 二维码图片的文件         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)));         } catch (Exception e) {            // 抛出异常            throw new Exception("Error: " + e.getMessage());        }        // 返回        return decodedData;     }         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);         }     } }


关键代码已贴上!至于怎么调用就不用我说了吧!

想看看效果吗?不好意思,不贴图,如果觉得神奇就拿起扫描的扫起来吧!

16 0
原创粉丝点击