调用此方法可直接通过流在浏览器页面生成二维码并触发微信支付。

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));}}  

微信支付二维码生成工具类相关推荐

  1. 微信小程序二维码生成工具,后端二维码生成工具类。

    微信小程序开发二维码生成工具类 前言 业务背景 设计思路 具体实现 接下来我们进行工具的改造 前言 或许这是你搜寻的第n篇文章来解决你项目中的问题,虽然我不能去替你完全适配你的业务需求,但是我可以给你 ...

  2. 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态

    微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...

  3. 二维码 生成工具类(文件转Base64字符串,Base64字符串转文件)

    希望我的知识榨干了能帮到你解除困难,要是没有帮助你的,问度娘和知爹 一.POM.xml依赖下载 二.工具类提供 一.POM.xml依赖下载 <!-- 生成二维码依赖 --><depe ...

  4. Java:二维码生成工具类

    java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...

  5. 关于二维码生成工具类简介

    二维码生成 需求:后端生成PDF同时带二维码贴上PDF界面上 废话不多说先上代码 首先:添加maven坐标 <groupId>com.google.zxing</groupId> ...

  6. zxing二维码生成工具类

    图片生成工具生成 1.支持多中形式的图片,二维码,条形码 2.支持一张图片多个二维码 3.支持二维码图片上加logo 4.支持图片头部底部添加文字描述 public class ZxingEncode ...

  7. Java利用HttpClient发送请求生成微信支付二维码、查询支付状态

    一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...

  8. 支付宝支付 第五集:二维码生成工具

    支付宝支付 第五集:二维码生成工具 一.代码 目录结构 BufferedImageLuminanceSource.java package com.dzy.alipay.qrcode;import c ...

  9. 二维码生成工具微信小程序源码下载

    二维码生成工具 支持上传二维码logo和调整尺寸背景颜色等等 无需域名与服务器 使用教程,用HBuilder X软件打卡项目然后运行到微信小程序即可 下方是演示图: 小程序源码下载地址: (已更新)二 ...

  10. 用ZXING生成二维码的工具类(可以去掉白边,添加logo)

    ===========================用ZXING生成二维码的工具类(可以去掉白边,添加logo)========================== /**  * @auther g ...

最新文章

  1. 第四周实践项目7 多项式求和
  2. JavaScript逻辑运算符的使用技巧
  3. 游戏入口点GameEntryPoint
  4. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
  5. Spring Boot学习
  6. python和java的区别-python与java区别
  7. 吴恩达机器学习作业代码(python)
  8. Redis开发与运维之第八章理解内存(四)
  9. 主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效
  10. 解决最新小马激活工具导致主页劫持问题
  11. Frps部署报错:cannot stat ‘frp_0.44.0_linux_amd64/frps‘: No such file or directory
  12. 【汇智学堂】docker网络管理之一
  13. ROS Spinning-----简介
  14. Hbuilder快捷键教程
  15. 虚拟机安装Linux(ubuntu)
  16. 白帽子黑帽子_6种白帽子seo技术可实现在线预期业务
  17. linux查看进程状态
  18. 解决二义性问题解决 java_C++中常见的两种二义性问题及其解决方式
  19. js中的trim函数怎么使用
  20. 爱康科技收购北京碳诺科技 加速公司碳排放战略布局

热门文章

  1. 【Linux】rm -rf 删除命令
  2. 手机CPU性能天梯图及品牌
  3. 腾讯云短信服务(详细教程-Django框架、API接口)实现
  4. 国内使用bing国际版(非国内国际切换版本)
  5. npn三种波形失真_三极管放大电路各点电压、电流波形图
  6. 手动修改主用认证服务器地址,主用认证服务器地址
  7. 对《致加西亚的信》的异议
  8. 事务的四大特性(ACID)
  9. 夜深人静写算法(一)- 搜索入门
  10. 计算机二级excel设置宏,Excel2013中为宏指定快捷键的方法