Maven引入包;

     <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency><!-- 工具包 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.2</version></dependency>

代码


import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Base64;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.gdhz.token.PassToken;
import com.java.st.lib.tools.io.URLResourceUtil;import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;@RestController
@RequestMapping("/qrCode")
public class QRCodeController {/*** * @param code     二维码内容* @param isPoster 是否带海报* @param response* @throws Exception*/@PassToken@RequestMapping("")public void getCode(String code, boolean isPoster,boolean isBase64, HttpServletResponse response) throws Exception {if (!StringUtils.isEmpty(code)) {response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");// 二维码图BufferedImage qrcodeImage = QrCodeUtil.generate(code, new QrConfig(350, 350));// 是否带海报if (isPoster) {// 背景图BufferedImage bgImage = ImageIO.read(URLResourceUtil.asFile("classpath:card.jpg"));// 画笔Graphics2D graphics2d = bgImage.createGraphics();// 背景图上画二维码drawImage(graphics2d, qrcodeImage, 200, 230);// 释放图形上下文,以及它正在使用的任何系统资源。graphics2d.dispose();if(isBase64) {ImageIO.write(bgImage, "jpg", Base64.getEncoder().wrap(response.getOutputStream()));}else {ImageIO.write(bgImage, "jpg", response.getOutputStream());}} else {if(isBase64) {ImageIO.write(qrcodeImage, "jpg", Base64.getEncoder().wrap(response.getOutputStream()));}else {ImageIO.write(qrcodeImage, "jpg", response.getOutputStream());}}}}/*** 绘制 图片* * @param graphics    画笔* @param bufferImage 图片资源* @param x           坐标 x* @param y           坐标 y* @return* @throws Exception*/public static Graphics2D drawImage(Graphics2D graphics, BufferedImage bufferImage, int x, int y) throws Exception {graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);graphics.drawImage(bufferImage, x, y, null);return graphics;}
}

升级版(自定义海报,二维码大小)


import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.util.Base64;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.gdhz.token.PassToken;
import com.java.st.lib.tools.io.URLResourceUtil;import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import lombok.extern.log4j.Log4j2;@RestController
@RequestMapping("/qrCode")
@Log4j2
public class QRCodeController {/*** * @param code         二维码内容* @param isPoster     是否带海报* @param isBase64     是否base64返回* @param posterImgUrl 海报背景* @param qrWidth      二维码宽* @param qrheight     二维码高* @param bgX          背景图的X坐标* @param bgY          背景图的Y坐标* @throws Exception*/@PassToken@RequestMapping("")public void getCode(String code, boolean isPoster, boolean isBase64, String posterImgUrl, Integer qrWidth,Integer qrheight, Integer bgX, Integer bgY, HttpServletResponse response) throws Exception {if (!StringUtils.isEmpty(code)) {response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");response.addHeader("Cache-Control", "post-check=0, pre-check=0");response.setHeader("Pragma", "no-cache");// 二维码默认长,宽,二维码的X,Y坐标位置int defaultQrWidth = 350, defaultQrheight = 350, defaultBgX = 200, defaultBgY = 230;if (qrWidth != null && qrWidth > 0) {defaultQrWidth = qrWidth;}if (qrheight != null && qrheight > 0) {defaultQrheight = qrheight;}if (bgX != null && bgX > 0) {defaultBgX = bgX;}if (bgY != null && bgY > 0) {defaultBgY = bgY;}// 二维码图BufferedImage qrcodeImage = QrCodeUtil.generate(code, new QrConfig(defaultQrWidth, defaultQrheight));// 是否带海报if (isPoster) {// 背景图BufferedImage bgImage = null;if (!StringUtils.isEmpty(posterImgUrl)) {try {bgImage = ImageIO.read(new URL(posterImgUrl));} catch (Exception e) {log.error("输入的地址不正确,找不到相关图片");}}if (bgImage == null) {bgImage = ImageIO.read(URLResourceUtil.asFile("classpath:card.jpg"));}// 画笔Graphics2D graphics2d = bgImage.createGraphics();// 背景图上画二维码drawImage(graphics2d, qrcodeImage, defaultBgX, defaultBgY);// 释放图形上下文,以及它正在使用的任何系统资源。graphics2d.dispose();if (isBase64) {ImageIO.write(bgImage, "jpg", Base64.getEncoder().wrap(response.getOutputStream()));} else {ImageIO.write(bgImage, "jpg", response.getOutputStream());}} else {if (isBase64) {ImageIO.write(qrcodeImage, "jpg", Base64.getEncoder().wrap(response.getOutputStream()));} else {ImageIO.write(qrcodeImage, "jpg", response.getOutputStream());}}}}/*** 绘制 图片* * @param graphics    画笔* @param bufferImage 图片资源* @param x           坐标 x* @param y           坐标 y* @return* @throws Exception*/public static Graphics2D drawImage(Graphics2D graphics, BufferedImage bufferImage, int x, int y) throws Exception {graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);graphics.drawImage(bufferImage, x, y, null);return graphics;}
}

Java生成海报带二维码,原图或base64返回相关推荐

  1. 【Uni-App】点击分享,生成海报带二维码,保存到本地图片,写入文字

    目录 一:需求 二:分析 三:准备工作 1.qrcode准备 2.并且在main.js去挂载 四:页面构建 1.html 2.data 3.js 二维码嵌入文字 一:需求 1.产品需要这个商品,必须分 ...

  2. java生成以及解析二维码

    java生成以及解析二维码 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 ...

  3. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  4. java生成和识别二维码

    全栈工程师开发手册 (作者:栾鹏) java教程全解 本文使用两种方式生成和识别二维码. 方法1:使用日本公司的qrcode 需要引入的包 qrcode_swetake.jar qrcode.jar ...

  5. 用 Java 生成和识别二维码就这么简单

    大家好,我是青空. 青空最近一直在思考一个问题,Java 能不能做一些比较有意思的事情,但是在网络上搜索的时候,有意思好玩的东西,都被 Python 给做了.Java 似乎就只剩下八股文,面试,框架, ...

  6. Java生成与解析二维码

    1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...

  7. java生成两种二维码

    引言 在这篇博客中关于二维码的基本原理先不做介绍,先介绍我们怎样利用java语言实现二维码的生成,现在二维 码在我们生活中已经非常常见了,一言不合就扫码!所以对于我们这帮程序猿来说,需要研究一把这个东 ...

  8. Java生成小程序二维码并带参数

    直接上代码: 工具类MpQrUtils.java,获取accessToken与二维码的输入流: import javax.servlet.http.HttpServletRequest;import ...

  9. 用java生成一个表白二维码

    之前对二维码粗略的看了一下觉得可以自己实现一个二维码用来表白,程序员的浪漫. 其实生成一个二维码非常简单几个类就可以搞定 import java.io.File; import java.nio.fi ...

最新文章

  1. Android Studio编写运行测试纯java代码可带main()函数
  2. Facebook首席工程负责人胡鲁辉:数字化2.0的理念、架构与业务模型丨鲸犀峰会
  3. python中cgi到底是什么_十分钟搞懂什么是CGI(转)
  4. 关于混合使用智能指针和内置指针的自己的问题和自己的见解(问题搜集中)这个帖子有待解决的问题
  5. c#利用zlib.net对文件进行deflate流压缩(和java程序压缩生成一样)
  6. 考不上本科就是低智商?用python爬3000条数据狠打脸
  7. 软件企业通常会犯近视和远视两个错误
  8. 第十三章 大型网站典型故障分析案例(待续)
  9. [TC]SRM615 div1 250 AmebaDiv1
  10. MySQL 第四次练习(多表查询)
  11. C语言快速找答案,C语言单选题找答案
  12. CentOS7系统中:安装tree命令的问题
  13. SECS Message解析说明
  14. 迅雷下gho文件变成php,window_GhostEXP将Windows新发布的补丁打入GHO文件,  Windows每隔一段时间,都会 - phpStudy...
  15. 服务器如何装系统和数据库,中软系统服务器及数据库安装规范(含维护).pdf
  16. 去哪儿2015校园招聘产品经理面试题
  17. 发票信息批量提取到 excel 软件 2.3
  18. CPT208 人机设计 笔记
  19. idea切换分支忘记commit,导致自己辛苦写的代码被覆盖,找不回来,别慌,这里教你一个好办法找回你未提交的代码
  20. MQL4读取hst文件代码范例

热门文章

  1. 今日收获 2018/4/22
  2. 微信小程序播放m3u8视频总结
  3. 想知道有哪些缩小视频大小的软件?这几个压缩软件你该知道
  4. 2021-2025年中国自动化侧面装载机行业市场供需与战略研究报告
  5. android 标题字体大小,如何修改android studio标题字体大小
  6. The application was unable to start correctly (0xc000007b)的勉强解决方案
  7. React / Vue 前后端分离项目实现微信分享教程
  8. Android图片选取和剪裁头像的相关问题
  9. linux 文件系统 panic,Linux kernel panic解决方法
  10. 生活大爆炸之光速可变,光速可超