qrcode二维码生成/解析
来源:互联网 发布:大数据平台建设目标 编辑:程序博客网 时间:2024/04/28 07:36
开源的二维码生成/解析包有google的zxing和qrcode,之前用zxing写的二维码生成方法生成的二维码用手机无法识别,昨天用qrcode开源包写个了简单的二维码生成方法,生成的二维码可以用手机扫描识别。
package com.lmg.qrcode.test;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 jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.data.QRCodeImage;import jp.sourceforge.qrcode.exception.DecodingFailedException;import com.swetake.util.Qrcode;public class QrCodeTest { public static void main(String[] args) { String content = "http://52smart.taobao.com welcome to my shop"; String imgPath = "my_logo.jpg"; encoderQrCode(content, imgPath); System.out.println(decodeQrCode(imgPath)); } /** * 生成二维码(QRCode)图片 * @param content * @param imgPath */ public static void encoderQrCode(String content, String imgPath) { try { Qrcode qrcode = new Qrcode(); qrcode.setQrcodeErrorCorrect('M'); qrcode.setQrcodeEncodeMode('B'); qrcode.setQrcodeVersion(7); byte[] contentBytes = content.getBytes("utf-8"); BufferedImage bufImg = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufImg.createGraphics(); gs.setBackground(Color.WHITE); gs.clearRect(0, 0, 200, 200); // 设定图像颜色 > BLACK gs.setColor(Color.BLACK); // 设置偏移量 不设置可能导致解析出错 int pixoff = 2; // 输出内容 > 二维码 if (contentBytes.length > 0 && contentBytes.length < 200) { 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); } } } } else { System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. "); } gs.dispose(); bufImg.flush(); File imgFile = new File(imgPath); // 生成二维码QRCode图片 ImageIO.write(bufImg, "png", imgFile); } catch (Exception e) { e.printStackTrace(); } } public static String decodeQrCode(String imgPath) { // QRCode 二维码图片的文件 File imageFile = new File(imgPath); BufferedImage bufImg = null; String result = null; try { bufImg = ImageIO.read(imageFile); QRCodeDecoder decoder = new QRCodeDecoder(); result = new String(decoder.decode(new MyQrCodeImage(bufImg))); } catch (IOException e) { e.printStackTrace(); } catch (DecodingFailedException dfe) { dfe.printStackTrace(); } return result; }}class MyQrCodeImage implements QRCodeImage { private BufferedImage bufImg; public MyQrCodeImage(BufferedImage bufImg) { this.bufImg = bufImg; } @Override public int getHeight() { return bufImg.getHeight(); } @Override public int getPixel(int x, int y) { return bufImg.getRGB(x, y); } @Override public int getWidth() { return bufImg.getWidth(); }}生成的二维码图片如下:
解析出来的结果如下:
- qrcode二维码生成/解析
- QRCode生成和解析二维码
- QRCode生成二维码和解析二维码
- 生成和解析二维码(QRCode.jar)
- java Qrcode生成二维码与解析
- qrcode生成,二维码生成
- java利用qrcode.jar进行处理二维码,生成、解析二维码
- java生成二维码并解析二维码(QRCode方式)
- QRcode php生成二维码
- query-qrcode生成二维码
- 使用QRCode生成二维码
- jquery.qrcode生成二维码
- 利用QRCode生成二维码
- QRcode生成二维码
- 利用QRCode生成二维码
- 利用QrCode生成二维码
- QRCode生成二维码
- java生成二维码QRCode
- 三大框架的整合和测试
- Leveldb源码分析--10
- 最简单的html文件上传示例
- 想在大学约妹子?先学这些PC维护技巧吧
- 寻你的人生 寻你的选择
- qrcode二维码生成/解析
- Java中数据库连接池原理机制的详细讲解
- 2013腾讯编程马拉松初赛第一场(3月21日)湫湫系列故事——减肥记II
- HOOK SOCKET
- 收藏大图
- RubyGems 学习笔记
- sql语句中left join、inner join中的on与where的区别
- YII CRUD例子 结合前面理论理解
- 黑马程序员——java编程那些事儿____jdk1.5新特性 静态导入、可变参数、高级for循环