- 浏览: 50107 次
- 性别:
文章分类
最新评论
一、本文目的:
为了研究对支付宝和微信支付的统一路口管理(一张二维码同时支持微信和支付宝扫码支付);本文不将对支付宝和微信的支付开发进行讲解,主要是二维码的生成和解析;
步骤:
1、准备jar包,在java中用到了两个jar包;一个用于生成二维码,一个用户解析二维码;
a、生成二维码jar包路径:http://www.swetake.com/qr/java/qr_java.html (注意:下载 qrcode_java0.50beta10.tar.gz,解压后在lib目录下的 qrcode.jar 即为用于生成二维码的库)
b、解析二维码jar包路径: http://sourceforge.jp/projects/qrcode/releases/ (注意:解压qrcode包后lib目录下的qrcode.jar包,把其重命名,避免与生成二维码jar包冲突即可)
2、java代码
a、TwoDimensionCodeImage 类:二维码图片对象
b、CommonUtils类:二维码操作核心类
为了研究对支付宝和微信支付的统一路口管理(一张二维码同时支持微信和支付宝扫码支付);本文不将对支付宝和微信的支付开发进行讲解,主要是二维码的生成和解析;
步骤:
1、准备jar包,在java中用到了两个jar包;一个用于生成二维码,一个用户解析二维码;
a、生成二维码jar包路径:http://www.swetake.com/qr/java/qr_java.html (注意:下载 qrcode_java0.50beta10.tar.gz,解压后在lib目录下的 qrcode.jar 即为用于生成二维码的库)
b、解析二维码jar包路径: http://sourceforge.jp/projects/qrcode/releases/ (注意:解压qrcode包后lib目录下的qrcode.jar包,把其重命名,避免与生成二维码jar包冲突即可)
2、java代码
a、TwoDimensionCodeImage 类:二维码图片对象
package com.ppfuns.aaa.entity; import jp.sourceforge.qrcode.data.QRCodeImage; import java.awt.image.BufferedImage; /** * Created with IntelliJ IDEA. * User: jony * Date: 2017/9/26 * Time: 9:53 * To change this template use File | Settings | File Templates. */ public class TwoDimensionCodeImage implements QRCodeImage { BufferedImage bufImg; public TwoDimensionCodeImage(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(); } }
b、CommonUtils类:二维码操作核心类
package com.ppfuns.aaa.common; import com.ppfuns.aaa.entity.TwoDimensionCodeImage; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.exception.DecodingFailedException; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Created with IntelliJ IDEA. * User: 简德群 * Date: 2017/9/26 * Time: 9:54 * To change this template use File | Settings | File Templates. */ public class CommonUtils { /** * 生成二维码(QRCode)图片 * @param content 存储内容 * @param imgPath 图片路径 */ public static void encoderQRCode(String content, String imgPath) { encoderQRCode(content, imgPath, "png", 7); } /** * 生成二维码(QRCode)图片 * @param content 存储内容 * @param output 输出流 */ public static void encoderQRCode(String content, OutputStream output) { encoderQRCode(content, output, "png", 7); } /** * 生成二维码(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 output 输出流 * @param imgType 图片类型 */ public static void encoderQRCode(String content, OutputStream output, String imgType) { encoderQRCode(content, output, 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 output 输出流 * @param imgType 图片类型 * @param size 二维码尺寸 */ public static void encoderQRCode(String content, OutputStream output, String imgType, int size) { try { BufferedImage bufImg = qRCodeCommon(content, imgType, size); // 生成二维码QRCode图片 ImageIO.write(bufImg, imgType, output); } 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); // 设定图像颜色> BLACK gs.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; } /** * 解析二维码(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 TwoDimensionCodeImage(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 input 输入流 * @return */ public String decoderQRCode(InputStream input) { BufferedImage bufImg = null; String content = null; try { bufImg = ImageIO.read(input); QRCodeDecoder decoder = new QRCodeDecoder(); content = new String(decoder.decode(new TwoDimensionCodeImage(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; } public static void main(String[] args) { String content = "https://k.87.re/2014/07/150724ix4.jpg"; //图片要求是已存在的二维码图片,这里的生成二维码只是对二维码图片中内容的更新 encoderQRCode(content,"C:\\Users\\lenovo\\Desktop\\121.jpg"); String path = "C:\\Users\\lenovo\\Desktop\\121.jpg"; String content1 = decoderQRCode(path); System.out.println(content1); // } }
发表评论
-
java 之sftp实现
2018-03-31 17:41 618上周进行了linux环境下sftp的配置和用户权限的创建:ht ... -
java webService之CXF的使用
2018-03-29 14:25 392使用场景:华为VOD系统与媒资系统的接口,资产数据(元数据XM ... -
java 中jstat的用法
2018-03-20 18:06 680JDK自带VM分析工具jps,jstat,jmap,jcons ... -
javaEE性能优化
2018-03-20 16:41 465性能的优化一般可以从多方面入手,前端资源,java程序,数据传 ... -
jvm gc日志检查
2018-03-20 15:08 334JVM的GC日志的主要参数包括如下几个: -XX:+Pr ... -
负载均衡的几种原理
2018-03-19 16:05 436什么是负载均衡? 就 ... -
基于TCP协议实现RPC
2018-03-19 11:28 674RPC的全称:Remote Process Call,即远程过 ... -
java 多线程
2018-03-16 13:29 321Java 多线程编程 Java 给 ... -
SpringMVC执行流程图
2018-03-15 10:46 433SpringMVC 流程图 DispatcherServle ... -
Java中BIO、NIO、AIO的原理及其区别
2018-03-12 17:34 613IO的处理方式通常分为 ... -
基于Spring 自定义标签实现
2017-11-30 09:26 490一、源码分析: Spring标签的定义分为默认标签和自定义 ... -
spring-data-redis
2017-09-18 11:54 699Spring-data-redis使用 1、maven依赖 ... -
java,redis
2017-09-18 11:32 322Redis 简介 Redis 是完全开源免费的,遵守BSD协议 ... -
Java xml与实体Bean的转换
2017-09-05 15:24 6401、pom.xml依赖包: <dependenc ... -
Java JVM虚拟机知识要点
2017-08-30 10:25 5681、JVM虚拟机图解: ... -
java 上传小于占用空间为4k的jpg图片异常问题处理
2017-07-19 18:02 493javaWeb上传图片 jpg占用空间为4k时,Commons ... -
Springmvc 注入字符串与时间格式的转换
2017-03-24 11:10 1148以下列出两种spring支持的时间转换 -、方式一 1、 ... -
linux下修改war包
2017-03-06 15:32 1037Linux上修改war包上的文件 www.MyExceptio ... -
itellij idea 11.1.3 mybatis 自动构建代码
2016-11-16 09:50 405步骤一: 1、在工程中pom.xml加添 <buil ... -
intellij idea 下resin容器远程调试
2016-11-16 09:27 5312resin远程调试(我使用的是resin-4.0.41版本): ...
相关推荐
java版本,二维码解析和生成代码,亲测成功,并已用于项目开发,集成于springmvc架构。包总含有对应jar包和代码。二维码生成方法是在controller中调用。返回的是二维码保存的路径,二维码保存地址文件夹事先建好,...
一个简单的Java二维码的生成与解析实现的小程序。想学习怎么样生成二维码的同学可以学习一下。仅供参考 谢谢
QRCodeUtils使用文档详见博客https://blog.csdn.net/qq_24091555/article/details/81263472
java 的二维码生成和解析源代码,在eclipse上直接可以导入使用,很方便
利用Google ZXing 实现Java 二维码生成、解析。
这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个...
java二维码的生成,和二维码的解析,主要实现二维码生成和解析
java二维码生成与解析代码实现
java二维码生成与解析代码实现代码 加载包后可直接运行
二维码生成及解析内涵两个java类原码与QRCode所需的jar包。
主要介绍了Java实现的生成二维码和解析二维码URL操作,结合实例形式分析了Java创建与解析二维码,以及文件读写等相关操作技巧,需要的朋友可以参考下
Java 二维码生成与解析包,在原有的基础上打包的,易用简单使用方法参照
二维码的生成与解析,java试下,修改一下图片路径就可以使用了 zxing qrcode
本代码为二维码生成和解析的Java实现代码,包括三个类和一个QRCode的jar包(一个jar包用于生成二维码,一个jar包用于读取二维码尤其用于读取的jar包不好下载,所以就一起放进来了,方便大家学习使用),一个生成...
java中二维码生成和解析的必须jar包 以及完整的java代码 可以直接使用
java二维码生成与解析含相应jar,并解决jsp引用二维码
二维码生成及解析java源码
关于Java的二维码的生成与解析(代码demo+jar包)
利用google的zwing 进行生成QRcode类型的二维码,以及如何解析二维码。
java实现二维码生成的几个方法,文中分析二维码的生成原理,编码方式及二维码的解析方式。