慕课网讲解

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编解码二维码相关推荐

  1. Java生成二维码与解码二维码

    下载QRCode.jar包 下载完成后在cmd命令行执行以下命令 mvn install:install-file -Dfile = QRCode的路径 -DgroupId=QRCode -Darti ...

  2. 数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据

    数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据 第一步在maven中配置需要的二维码jar包 1.1 谷歌提供的帮助类 1.2 关于二维码的工具类 1.3 测试类 第二步 在Exce ...

  3. [Python]使用QRCode生成彩色二维码

    一. 安装QRCode模块 QRCode模块依赖于Pillow模块,在安装QRCode模块前需要先安装Pillow模块.可使用如下命令安装: pip install Pillow QRCode模块安装 ...

  4. 解决qrcode生成的二维码安卓手机长按不识别问题

    文章目录 问题描述 toDataURL语法 自己验证 问题描述 qrcode生成的二维码,在苹果等手机上长按可识别,在华为手机上长按没有反应,截图保存下来长按又可以识别. 问题原因 浏览器兼容问题 q ...

  5. vue/html+qrcode生成付款二维码(前端部分)

    vue+qrcode生成付款二维码 1.Vue项目中如何使用qrcode生成付款二维码 一.安装qrcode.js 二.新建qrcode.vue组件 三.项目中引入组件 2.Html项目中如何使用 1 ...

  6. 解决qrcode生成的二维码华为手机长按不识别、toDataURL之后中间logo丢失等问题

    问题描述 qrcode生成的二维码,在苹果等手机上长按可识别,在华为手机上长按没有反应,截图保存下来长按又可以识别. 问题原因 浏览器兼容问题 qrcode在页面生成二维码时,会生成一个canvas标 ...

  7. 利用qrcode.js生成二维码,并点击按钮下载二维码图片(亲测可用)

    话不多说,先上代码(复制即用): <!DOCTYPE html> <html lang="en"> <head><meta charset ...

  8. ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法

    ThoughtWorks.QRCode 生成QR二维码时提示"索引超出了数组界限"的原因和解决方法 参考文章: (1)ThoughtWorks.QRCode 生成QR二维码时提示& ...

  9. 基于 Django 使用 qrcode 模块生成二维码

    简介: 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于1994 年发明.现随着智能手机的普及,已广 ...

最新文章

  1. (21)页目录表,页表基址(XP系统 10-10-12分页模式)
  2. Class.getResource()与Class.getClassLoader().getResource()解析
  3. ABP框架详解(三)Domain
  4. nodejs读取本地txt文件并输出到浏览器
  5. 1208. 尽可能使字符串相等
  6. Python刚刚尝试就遇:SyntaxError: invalid syntax
  7. linux之svn回滚/回退到某个版本
  8. php对接亿乐社区,亿乐社区对接教程
  9. 正反馈理论与管理学——马太效应、比…
  10. IMDB影评倾向分类 - N-Gram
  11. qlv转mp4出来没有画面,无画面,解决方法
  12. 安卓sqlite的使用
  13. 关于小学生学习编程语言C++的经历经验分享,五问五答
  14. 环信sdk android 聊天,Android基于环信SDK开发IM即时聊天
  15. Android获取汉字首字母工具类
  16. LARS算法的几何意义
  17. 【计算机网络】ICMP协议
  18. JSP网站开发技术两种模式介绍
  19. 如何有效的降低低功耗设备的功耗
  20. 计算机键盘银音乐,从键盘到键盘 ——一名音乐生到计算机老师的华丽转型

热门文章

  1. 刷爆力扣之电话号码的字母组合
  2. Qml 透明窗口,设置不规则等透明窗口,鼠标可穿透到桌面
  3. 分布式虚拟交换机和标准交换机
  4. Privoxy代理配置
  5. 怎样设置html设置透视,如何使用css实现透视效果
  6. 协同办公系统工作交接(离职工作数据交接)功能构想
  7. 【问题解决指北】Win10电脑中文用户名修改为英文
  8. Webstorm 2020.3 安装 Emmet 插件
  9. 为什么引入ReLU激活函数
  10. RY-D1/1电压继电器