Java生成二维码
2014-04-04 15:37
363 查看
为了庆祝明天和这不成器的好产品,写上这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); } } }
关键代码已贴上!至于怎么调用就不用我说了吧!
想看看效果吗?不好意思,不贴图,如果觉得神奇就拿起扫描的扫起来吧!
相关文章推荐
- Java学习笔记 - 06
- 每日一练------打印菱形
- 关于Java中的*.properties的操作
- Java Web开发 · 第二天
- java同步锁
- Java字节码运行浅析
- java发送短信测试例子,备着以后用
- Java开发者应该列入年度计划的5件事
- spring 嵌套事务
- Java多线程断点续传下载
- 接口参数中文乱码(MYSQL+STRUTS)
- 处理特殊log语句的java函数
- java 发送邮件测试例子
- 扩展SpringMVC以支持更精准的数据绑定1
- eclipse常用快捷键 --10大常用快捷键 可以提高不小的工作效率哦
- java static 与 线程 共用同步问题
- 工作的小经验之2:关于java和面向对象
- 什么是堆栈追踪(StackTrace)?如何利用StackTrace对程序进行调试?
- Eclipse中web项目引用 其他项目
- 重装Eclipse、离线安装ADT、Android SDK