微信支付二维码生成工具类
调用此方法可直接通过流在浏览器页面生成二维码并触发微信支付。
QRCodeUtils.encode(String content, String imgPath, OutputStream output, boolean needCompress) 直接上代码
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.OutputStream;
import java.util.Hashtable;
import java.util.Random;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class QRCodeUtils {private static final String CHARSET = "utf-8";private static final String FORMAT_NAME = "JPG";// 二维码尺寸 private static final int QRCODE_SIZE = 300;// LOGO宽度 private static final int WIDTH = 60;// LOGO高度 private static final int HEIGHT = 60;private static BufferedImage createImage(String content, String imgPath,boolean needCompress) throws Exception {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.CHARACTER_SET, CHARSET);hints.put(EncodeHintType.MARGIN, 1);BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000: 0xFFFFFFFF);}}if (imgPath == null || "".equals(imgPath)) {return image;}// 插入图片 QRCodeUtils.insertImage(image, imgPath, needCompress);return image;}/*** 插入LOGO ** @param source* 二维码图片 * @param imgPath* LOGO图片地址 * @param needCompress* 是否压缩 * @throws Exception*/private static void insertImage(BufferedImage source, String imgPath,boolean needCompress) throws Exception {File file = new File(imgPath);if (!file.exists()) {System.err.println(""+imgPath+" 该文件不存在!");return;}Image src = ImageIO.read(new File(imgPath));int width = src.getWidth(null);int height = src.getHeight(null);if (needCompress) { // 压缩LOGO if (width > WIDTH) {width = WIDTH;}if (height > HEIGHT) {height = HEIGHT;}Image image = src.getScaledInstance(width, height,Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose();src = image;}// 插入LOGO Graphics2D graph = source.createGraphics();int x = (QRCODE_SIZE - width) / 2;int y = (QRCODE_SIZE - height) / 2;graph.drawImage(src, x, y, width, height, null);Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);graph.setStroke(new BasicStroke(3f));graph.draw(shape);graph.dispose();}/*** 生成二维码(内嵌LOGO) ** @param content* 内容 * @param imgPath* LOGO地址 * @param destPath* 存放目录 * @param needCompress* 是否压缩LOGO * @throws Exception*/public static String encode(String content, String imgPath, String destPath,boolean needCompress) throws Exception {BufferedImage image = QRCodeUtils.createImage(content, imgPath,needCompress);mkdirs(destPath);String file = new Random().nextInt(99999999)+".jpg";ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file));return file;}/*** 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) * @date 2013-12-11 上午10:16:36 * @param destPath 存放目录 */public static void mkdirs(String destPath) {File file =new File(destPath);//当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) if (!file.exists() && !file.isDirectory()) {file.mkdirs();}}/*** 生成二维码(内嵌LOGO) ** @param content* 内容 * @param imgPath* LOGO地址 * @param destPath* 存储地址 * @throws Exception*/public static void encode(String content, String imgPath, String destPath)throws Exception {QRCodeUtils.encode(content, imgPath, destPath, false);}/*** 生成二维码 ** @param content* 内容 * @param destPath* 存储地址 * @param needCompress* 是否压缩LOGO * @throws Exception*/public static void encode(String content, String destPath,boolean needCompress) throws Exception {QRCodeUtils.encode(content, null, destPath, needCompress);}/*** 生成二维码 ** @param content* 内容 * @param destPath* 存储地址 * @throws Exception*/public static void encode(String content, String destPath) throws Exception {QRCodeUtils.encode(content, null, destPath, false);}/*** 生成二维码(内嵌LOGO) * content可以作为微信返回的codeURL,调用此方法可直接通过流在浏览器页面* 生成二维码并触发微信支付。* @param content* 内容 * @param imgPath* LOGO地址 * @param output* 输出流 * @param needCompress* 是否压缩LOGO * @throws Exception*/public static void encode(String content, String imgPath,OutputStream output, boolean needCompress) throws Exception {BufferedImage image = QRCodeUtils.createImage(content, imgPath,needCompress);ImageIO.write(image, FORMAT_NAME, output);}/*** 生成二维码 ** @param content* 内容 * @param output* 输出流 * @throws Exception*/public static void encode(String content, OutputStream output)throws Exception {QRCodeUtils.encode(content, null, output, false);}/*** 解析二维码 ** @param file* 二维码图片 * @return* @throws Exception*/public static String decode(File file) throws Exception {BufferedImage image;image = ImageIO.read(file);if (image == null) {return null;}BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));Result result;Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();hints.put(DecodeHintType.CHARACTER_SET, CHARSET);result = new MultiFormatReader().decode(bitmap, hints);String resultStr = result.getText();return resultStr;}/*** 解析二维码 ** @param path* 二维码图片地址 * @return* @throws Exception*/public static String decode(String path) throws Exception {return QRCodeUtils.decode(new File(path));}}
微信支付二维码生成工具类相关推荐
- 微信小程序二维码生成工具,后端二维码生成工具类。
微信小程序开发二维码生成工具类 前言 业务背景 设计思路 具体实现 接下来我们进行工具的改造 前言 或许这是你搜寻的第n篇文章来解决你项目中的问题,虽然我不能去替你完全适配你的业务需求,但是我可以给你 ...
- 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态
微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...
- 二维码 生成工具类(文件转Base64字符串,Base64字符串转文件)
希望我的知识榨干了能帮到你解除困难,要是没有帮助你的,问度娘和知爹 一.POM.xml依赖下载 二.工具类提供 一.POM.xml依赖下载 <!-- 生成二维码依赖 --><depe ...
- Java:二维码生成工具类
java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...
- 关于二维码生成工具类简介
二维码生成 需求:后端生成PDF同时带二维码贴上PDF界面上 废话不多说先上代码 首先:添加maven坐标 <groupId>com.google.zxing</groupId> ...
- zxing二维码生成工具类
图片生成工具生成 1.支持多中形式的图片,二维码,条形码 2.支持一张图片多个二维码 3.支持二维码图片上加logo 4.支持图片头部底部添加文字描述 public class ZxingEncode ...
- Java利用HttpClient发送请求生成微信支付二维码、查询支付状态
一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...
- 支付宝支付 第五集:二维码生成工具
支付宝支付 第五集:二维码生成工具 一.代码 目录结构 BufferedImageLuminanceSource.java package com.dzy.alipay.qrcode;import c ...
- 二维码生成工具微信小程序源码下载
二维码生成工具 支持上传二维码logo和调整尺寸背景颜色等等 无需域名与服务器 使用教程,用HBuilder X软件打卡项目然后运行到微信小程序即可 下方是演示图: 小程序源码下载地址: (已更新)二 ...
- 用ZXING生成二维码的工具类(可以去掉白边,添加logo)
===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /** * @auther g ...
最新文章
- 第四周实践项目7 多项式求和
- JavaScript逻辑运算符的使用技巧
- 游戏入口点GameEntryPoint
- 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
- Spring Boot学习
- python和java的区别-python与java区别
- 吴恩达机器学习作业代码(python)
- Redis开发与运维之第八章理解内存(四)
- 主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效
- 解决最新小马激活工具导致主页劫持问题
- Frps部署报错:cannot stat ‘frp_0.44.0_linux_amd64/frps‘: No such file or directory
- 【汇智学堂】docker网络管理之一
- ROS Spinning-----简介
- Hbuilder快捷键教程
- 虚拟机安装Linux(ubuntu)
- 白帽子黑帽子_6种白帽子seo技术可实现在线预期业务
- linux查看进程状态
- 解决二义性问题解决 java_C++中常见的两种二义性问题及其解决方式
- js中的trim函数怎么使用
- 爱康科技收购北京碳诺科技 加速公司碳排放战略布局