1.导依赖

                <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.14</version></dependency><!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency>

2.工具类

package com.jdkj.charge.common.utils;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.ByteArrayOutputStream;
import java.io.File;
import java.io.OutputStream;
import java.util.Hashtable;import javax.imageio.ImageIO;import org.apache.commons.codec.binary.Base64;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class QRCodeUtil {private static final String CHARSET = "utf-8";private static final String FORMAT_NAME = "JPG";// 二维码尺寸private static final int QRCODE_SIZE = 400;// LOGO宽度private static final int WIDTH = 60;// LOGO高度private static final int HEIGHT = 60;/*** * @param content      文本* @param imgPath      插入logo地址* @param needCompress 压缩* @return image 图片* @throws Exception 异常*/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);// 去除白边bitMatrix = deleteWhite(bitMatrix);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;}// 插入图片QRCodeUtil.insertImage(image, imgPath, needCompress);return image;}/*** 对二维码中插入图片* * @param source       图片资源* @param imgPath      图片地址* @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) { // 压缩LOGOif (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;}// 插入LOGOGraphics2D 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();}// 通过文件编码public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception {BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);mkdirs(destPath);ImageIO.write(image, FORMAT_NAME, new File(destPath));}// 通过字符串编码public static BufferedImage encode(String content, String imgPath, boolean needCompress) throws Exception {BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);return image;}// 创建文件夹public static void mkdirs(String destPath) {File file = new File(destPath);if (!file.exists() && !file.isDirectory()) {file.mkdirs();}}// 通过字符编码储存为文件public static void encode(String content, String imgPath, String destPath) throws Exception {QRCodeUtil.encode(content, imgPath, destPath, false);}// 编码到文件地址public static void encode(String content, String destPath) throws Exception {QRCodeUtil.encode(content, null, destPath, false);}// 编码到输出流并输出public static void encode(String content, String imgPath, OutputStream output, boolean needCompress)throws Exception {BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);ImageIO.write(image, FORMAT_NAME, output);}// 编码到输出流public static void encode(String content, OutputStream output) throws Exception {QRCodeUtil.encode(content, null, output, false);}// 返回Base64编码的图片public static String encode(String content) throws Exception {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();encode(content, byteArrayOutputStream);return "data:image/jpg;base64," + Base64.encodeBase64String(byteArrayOutputStream.toByteArray());}// 去除图片白边private static BitMatrix deleteWhite(BitMatrix matrix) {int[] rec = matrix.getEnclosingRectangle();int resWidth = rec[2] + 1;int resHeight = rec[3] + 1;BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);resMatrix.clear();for (int i = 0; i < resWidth; i++) {for (int j = 0; j < resHeight; j++) {if (matrix.get(i + rec[0], j + rec[1]))resMatrix.set(i, j);}}return resMatrix;}
}

3.controller层

        /*** 二维码*/@ResponseBody@GetMapping("/getQRCode")public R getQECode(Integer chargeId) throws Exception {ChargeEntity charge = chargeService.getById(chargeId);return R.ok().put("QRCode", QRCodeUtil.encode(charge.getHphm() + " | " + charge.getHpzl()));}

4.界面显示

                HTML:<img id="code" src="" alt="">JS:$.ajax({url: '/getQRCode',type: 'get',data: {'chargeId':data.id},success: function(data){$('#code').prop("src",data.QRCode);}})

二维码的后台生成及前台界面显示QRCode相关推荐

  1. APIcoud 手机二维码or条码 生成与扫描模块

    APIcoud 手机二维码or条码 生成与扫描模块 刚接触APIcoud 的时候觉得很多模块真的好难,初次接触二维码的时候觉得,生成二维码真的很费劲呢,其实不然,是真的很难,但是APIcoud 已经封 ...

  2. 扫描二维码实现后台管理系统登录

    二维码实现后台登录简单版的过程: 1.前端页面实时生成带有唯一标识uid的二维码,二维码内容为系统内的接口.(后端也可以生成) 2.当扫描二维码时访问后台接口,后台的接口获取uid,组装数据访问微信端 ...

  3. PHP二维码在线制作生成系统源码 无需数据库 带logo图标

    简介: PHP二维码在线制作生成系统源码 无需数据库 带logo图标 网盘下载地址: http://kekewl.net/Myae89V9DX00 图片:

  4. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...

    二维码相关---java生成二维码名片,并且自动保存到手机通讯录中... 技术qq交流群:JavaDream:251572072 1.首先介绍一个api.   Zxing是Google提供的关于条码 ...

  5. 微信公众号二维码海报自动生成,海报通推广有绝招

    公众号二维码海报自动生成,使用公众号开发接口生成带参数的二维码和获取用户基本信息(UnionID机制)实现海报通的效果,在自己的服务器上部署就可以,也可以直接使用微号帮平台生成海报二维码. 1.生成海 ...

  6. 二维码介绍及二维码的Python生成

    新时代,人们有新的追求,自然而然会有新发明的诞生.去年,在"一带一路"国际合作高峰论坛举行期间, 20 国青年投票选出中国的"新四大发明":高铁.扫码支付.共享 ...

  7. thinkphp用phpqrcode生成二维码(含中间带logo、临时二维码)或生成微信二维码海报的方法

    前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都 ...

  8. 如何制作二维码?制作生成二维码的小妙招

    如何制作二维码?说道二维码相信大家都不陌生,现如今二维码我们几乎每天都会接触到.无论是扫描二维码添加好用还是通过二维码获取新闻资讯等等,二维码与我们的日常生活息息相关.故而学会自己制作生成二维码也是一 ...

  9. Android zxing,轻松实现二维码扫描、生成

    Android  zxing,轻松实现二维码扫描.生成 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有, ...

最新文章

  1. 2021年春季学期-信号与系统-第十三次作业参考答案-第十一小题
  2. Python-EEG工具库MNE中文教程(2)-MNE中数据结构Epoch及其创建方法
  3. 不间断电源ups标准_什么是ups不间断电源,ups电源的重要性。
  4. php ftp 创建文件夹失败,phpftp上传多个文件时失败
  5. Java SE 6 新特性: JMX 与系统管理(转载)-asp.net关注
  6. 分布式系统概念 | 一致性协议:拜占庭将军问题、Paxos、Raft
  7. 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
  8. linux进程泄露命令明文参数,sshpass 使Linux可以明文参数输入SSH密码(示例代码)
  9. java数组重复_JAVA数组去除重复数据
  10. python netsnmp与pysnmp
  11. zoj 1372
  12. 介绍计算机课程英语作文,关于电脑课的英语作文
  13. 如何截图一张完整的表_wps2016表格太长怎么截图打印?
  14. 【渝粤教育】国家开放大学2018年春季 0553-21T色彩 参考试题
  15. 初始C语言——求算法,求1-1/2+1/3-1/4+……+1/99-1/100的值
  16. 基本图像变换:线性变换,仿射变换,投影变换
  17. springboo集成bboss-elasticsearch实现elasticsearch客户端
  18. 2012意大利之行1:从深圳到罗马_我是亲民_新浪博客
  19. 希望计算机在未来会变成啥样,人类的未来会是什么样?一个细思恐极而又非常现实的终极归宿...
  20. matlab三元方程拟合,3元函数拟合及结果.docx

热门文章

  1. NVIDIA-XAVIER-NX 连接wifi、添加arm软件源、安装arm中文输入法、安装ros-melodic、nomachine远程控制界面、固定有线网卡静态ip
  2. 2018美国大学计算机科学,2018usnews美国大学设计研究生计算机科学专业排名
  3. 2020一级计算机考证
  4. c语言如何读出字符串中的数据,如何把数据存在字符串中
  5. 您计算机的日期和时间不正确 因此无法,电脑显示时间不正确_电脑日期时间显示不对怎么办...
  6. iPhone 输入正确密码,但提示不正确怎么办?
  7. C#字符串格式输入不正确怎么办?
  8. POJ 3130 How I Mathematician Wonder What You Are! 半平面交
  9. 元宇宙将如何改变工作的未来?
  10. Enigma加解密算法实现C++