Java实现二维码的生成与识别
来源:互联网 发布:无法安装java 编辑:程序博客网 时间:2024/06/01 09:13
二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。
所需要的jar包
QRcode.jar
二维码图片类 QrcodeImg.java
package qrcode;import jp.sourceforge.qrcode.data.QRCodeImage;import java.awt.image.BufferedImage;/** * Created by zf on 2017/6/12. */public class QrcodeImg implements QRCodeImage { private BufferedImage bufImg = null; public QrcodeImg(BufferedImage bufImg) { this.bufImg = bufImg; } public int getWidth() { return bufImg.getWidth(); } public int getHeight() { return bufImg.getHeight(); } public int getPixel(int i, int i1) { return bufImg.getRGB(i, i1); }}
二维码生成类 ImgEncoder.java
package qrcode;import com.swetake.util.Qrcode;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;/** * Created by zf on 2017/6/12. */public class ImgEncoder { private int width = 140;//图片宽 private int height = 140;//图片长 private String imgPath = "D:\\qrcode.png";//图片保存位置 public ImgEncoder() { } public ImgEncoder(int width, int height, String imgPath) { this.width = width; this.height = height; this.imgPath = imgPath; } public boolean generate(String content) { try { Qrcode qrcode = new Qrcode(); // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小 qrcode.setQrcodeErrorCorrect('Q'); qrcode.setQrcodeEncodeMode('B'); // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大 qrcode.setQrcodeVersion(7); //设置图片尺寸 BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //绘制二维码图片 Graphics2D gs=bufImg.createGraphics(); //设置二维码背景颜色 gs.setBackground(Color.WHITE); //创建一个矩形区域 gs.clearRect(0, 0, width, height); //设置二维码的图片颜色值 黑色 gs.setColor(Color.BLACK); // 获得内容的字节数组,设置编码格式 byte[] contentBytes = content.getBytes("utf-8"); // 设置偏移量,不设置可能导致解析出错 int pixoff = 2; //输出二维码 if (contentBytes.length > 0 && contentBytes.length < 400) { boolean[][] codeOut = qrcode.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); } } } } gs.dispose(); bufImg.flush(); //生成二维码图片 File img = new File(imgPath); if (img.exists()) { img.delete(); } ImageIO.write(bufImg, "png", img); return true; } catch (Exception e) { e.printStackTrace(); } return false; }}
二维码识别类 ImgDecoder.java
package qrcode;import jp.sourceforge.qrcode.QRCodeDecoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;/** * Created by zf on 2017/6/12. */public class ImgDecoder { public static String decode(String imgPath) { String content = "error"; try { File img = new File(imgPath); BufferedImage bufImg = ImageIO.read(img); QRCodeDecoder qrCodeDecoder = new QRCodeDecoder(); content = new String(qrCodeDecoder.decode(new QrcodeImg(bufImg)), "utf-8"); } catch (Exception e) { e.printStackTrace(); } return content; }}
测试:
阅读全文
1 0
- Java实现二维码的生成与识别
- Java实现二维码生成与识别
- 二维码的生成与识别
- 二维码的生成与识别
- JAVA 二维码生成识别
- 基于ZXing的二维码生成与识别
- Zxing 二维码的生成与识别
- Unity3D二维码的识别与生成
- Android之二维码的生成与识别
- HTML5 实现扫描识别二维码 生成二维码
- QRCode二维码生成与识别
- ZXing 二维码生成与识别
- Android二维码识别与生成
- QRCode - 二维码识别与生成
- android二维码生成与识别
- java二维码生成与解析代码实现
- java二维码生成与解析代码实现
- java二维码生成与解析代码实现
- android View的事件分发
- Android 国际化button以及tablayout字母自动变大写问题
- C# LINQ to XML
- Linux搭建ftp服务器
- 设计模式的学习(三)—— 装饰者模式
- Java实现二维码的生成与识别
- 整理Linux查看系统日志的一些常用命令
- error_reporting( )—规定不同的错误级别报告
- 404和500错误页的配置
- 简单Maven的Web项目之验证码(Kaptcha篇)
- InputStreamReader 和 OutputStreamWriter
- MyBatis分页插件PageHelper的使用
- mysql索引:b tree索引和hash索引的区别
- Unofficial Windows Binaries for Python Extension Packages (网址及作用)