使用日本人的库QRCode编解码二维码
慕课网讲解
http://www.imooc.com/learn/531
首先导入其jar包。
1.首先建立一个实现QRCodeImage的类
/*** @FileName: QRCodeImageBean.java* @Author* @Description:* @Date 2016年7月1日 下午11:05:10* @CopyRight ZTE Corporation*/
package com.xsy.qrcode.jpqrcode.bean;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;public class QRCodeImageBean implements QRCodeImage{BufferedImage bufImg;public QRCodeImageBean(BufferedImage bufImg){this.bufImg = bufImg;}public int getHeight(){return bufImg.getHeight();}public int getPixel(int x, int y){return bufImg.getRGB(x, y);}public int getWidth(){return bufImg.getWidth();}
}
2.在建立一个编解码的工具类
package com.xsy.qrcode.jpqrcode;import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;import com.swetake.util.Qrcode;
import com.xsy.qrcode.jpqrcode.bean.QRCodeImageBean;import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;public class QRCode{/*** 解析二维码(QRCode)* * @param imgPath* @return*/public static String decoderQRCode(String imgPath){// QRCode 二维码图片的文件File imageFile = new File(imgPath);BufferedImage bufImg = null;String content = null;try{bufImg = ImageIO.read(imageFile);QRCodeDecoder decoder = new QRCodeDecoder();content = new String(decoder.decode(new QRCodeImageBean(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();}return content;}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param imgPath* 图片路径* @param imgType* 图片类型*/public static void encoderQRCode(String content, String imgPath, String imgType){encoderQRCode(content, imgPath, imgType, 7);}/*** 生成二维码(QRCode)图片* * @param content* 存储内容* @param imgPath* 图片路径* @param imgType* 图片类型* @param size* 二维码尺寸*/public static void encoderQRCode(String content, String imgPath, String imgType, int size){try{BufferedImage bufImg = qRCodeCommon(content, imgType, size);File imgFile = new File(imgPath);// 生成二维码QRCode图片ImageIO.write(bufImg, imgType, imgFile);}catch(Exception e){e.printStackTrace();}}/*** 生成二维码(QRCode)图片的公共方法* * @param content* 存储内容* @param imgType* 图片类型* @param size* 二维码尺寸* @return*/private static BufferedImage qRCodeCommon(String content, String imgType, int size){BufferedImage bufImg = null;try{Qrcode qrcodeHandler = new Qrcode();// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小qrcodeHandler.setQrcodeErrorCorrect('M');qrcodeHandler.setQrcodeEncodeMode('B');// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大qrcodeHandler.setQrcodeVersion(size);// 获得内容的字节数组,设置编码格式byte[] contentBytes = content.getBytes("utf-8");// 图片尺寸int imgSize = 67 + 12 * (size - 1);bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);Graphics2D gs = bufImg.createGraphics();// 设置背景颜色gs.setBackground(Color.WHITE);gs.clearRect(0, 0, imgSize, imgSize);// 设定图像颜色> BLACKgs.setColor(Color.BLACK);// 设置偏移量,不设置可能导致解析出错int pixoff = 2;// 输出内容> 二维码if(contentBytes.length > 0 && contentBytes.length < 800){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, 800].");}gs.dispose();bufImg.flush();}catch(Exception e){e.printStackTrace();}return bufImg;}
}
3.测试
/*** @FileName: QRCodeTest.java* @Author* @Description:* @Date 2016年7月1日 下午11:03:24* @CopyRight ZTE Corporation*/
package com.xsy.qrcode.jpqrcode;import org.junit.Test;public class QRCodeTest{@Testpublic void testEncodeQR(){String imgPath = "d:/xsy/Test.png";String encoderContent = "这是我的电话号码:15208384257";QRCode.encoderQRCode(encoderContent, imgPath, "png");System.out.println("encoder success!!!");}@Testpublic void testDecodeQR(){String imgPath = "d:/xsy/46647064.jpg";String qrCon = QRCode.decoderQRCode(imgPath);System.out.println("decoder success!!!");System.out.println("二维码内容为:" + qrCon);}
}
测试通过的,可以放心使用
使用日本人的库QRCode编解码二维码相关推荐
- Java生成二维码与解码二维码
下载QRCode.jar包 下载完成后在cmd命令行执行以下命令 mvn install:install-file -Dfile = QRCode的路径 -DgroupId=QRCode -Darti ...
- 数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据
数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据 第一步在maven中配置需要的二维码jar包 1.1 谷歌提供的帮助类 1.2 关于二维码的工具类 1.3 测试类 第二步 在Exce ...
- [Python]使用QRCode生成彩色二维码
一. 安装QRCode模块 QRCode模块依赖于Pillow模块,在安装QRCode模块前需要先安装Pillow模块.可使用如下命令安装: pip install Pillow QRCode模块安装 ...
- 解决qrcode生成的二维码安卓手机长按不识别问题
文章目录 问题描述 toDataURL语法 自己验证 问题描述 qrcode生成的二维码,在苹果等手机上长按可识别,在华为手机上长按没有反应,截图保存下来长按又可以识别. 问题原因 浏览器兼容问题 q ...
- vue/html+qrcode生成付款二维码(前端部分)
vue+qrcode生成付款二维码 1.Vue项目中如何使用qrcode生成付款二维码 一.安装qrcode.js 二.新建qrcode.vue组件 三.项目中引入组件 2.Html项目中如何使用 1 ...
- 解决qrcode生成的二维码华为手机长按不识别、toDataURL之后中间logo丢失等问题
问题描述 qrcode生成的二维码,在苹果等手机上长按可识别,在华为手机上长按没有反应,截图保存下来长按又可以识别. 问题原因 浏览器兼容问题 qrcode在页面生成二维码时,会生成一个canvas标 ...
- 利用qrcode.js生成二维码,并点击按钮下载二维码图片(亲测可用)
话不多说,先上代码(复制即用): <!DOCTYPE html> <html lang="en"> <head><meta charset ...
- ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法
ThoughtWorks.QRCode 生成QR二维码时提示"索引超出了数组界限"的原因和解决方法 参考文章: (1)ThoughtWorks.QRCode 生成QR二维码时提示& ...
- 基于 Django 使用 qrcode 模块生成二维码
简介: 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于1994 年发明.现随着智能手机的普及,已广 ...
最新文章
- (21)页目录表,页表基址(XP系统 10-10-12分页模式)
- Class.getResource()与Class.getClassLoader().getResource()解析
- ABP框架详解(三)Domain
- nodejs读取本地txt文件并输出到浏览器
- 1208. 尽可能使字符串相等
- Python刚刚尝试就遇:SyntaxError: invalid syntax
- linux之svn回滚/回退到某个版本
- php对接亿乐社区,亿乐社区对接教程
- 正反馈理论与管理学——马太效应、比…
- IMDB影评倾向分类 - N-Gram
- qlv转mp4出来没有画面,无画面,解决方法
- 安卓sqlite的使用
- 关于小学生学习编程语言C++的经历经验分享,五问五答
- 环信sdk android 聊天,Android基于环信SDK开发IM即时聊天
- Android获取汉字首字母工具类
- LARS算法的几何意义
- 【计算机网络】ICMP协议
- JSP网站开发技术两种模式介绍
- 如何有效的降低低功耗设备的功耗
- 计算机键盘银音乐,从键盘到键盘 ——一名音乐生到计算机老师的华丽转型