java在底图上生成二维码以及文字

1.添加依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-extra</artifactId><version>5.4.3</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version>
</dependency>

2.工具类

package com.sunente.framework.qrcode;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.sunente.framework.assets.deviceAsset.bean.Device;import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/*** @Description: 在图片上生成二维码并且在图片上添加文字response前端*/
public class QRcodeImageFont {// 默认宽为300private static Integer width = 120;// 默认高为300private static Integer height = 120;// 默认二维码图片格式private static String imageFormat = "png";// 默认二维码字符编码private static String charType = "utf-8";// 容错等级 L、M、Q、H 其中 L 为最低, H 为最高private static ErrorCorrectionLevel corretionLevel = ErrorCorrectionLevel.M;// 二维码与图片的边缘private static Integer margin = 0;// 二维码参数private static Map<EncodeHintType, Object> encodeHits = new HashMap<EncodeHintType, Object>();// 初始化二维码的参数private static void initialParams() {// 字符编码encodeHits.put(EncodeHintType.CHARACTER_SET, charType);// 容错等级 L、M、Q、H 其中 L 为最低, H 为最高encodeHits.put(EncodeHintType.ERROR_CORRECTION, corretionLevel);// 二维码与图片边距 就是白边有多宽encodeHits.put(EncodeHintType.MARGIN, margin);}/**** 在一张背景图上添加二维码*/public static void drawString(String code, HttpServletResponse response, byte[] bytes) throws Exception {BufferedImage image = addBaseMap(code,bytes);Graphics2D gd = image.createGraphics();// 5.设置对线段的锯齿状边缘处理gd.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);// 6.设置水印文字颜色gd.setColor(Color.black);// 7.设置水印文字Fontgd.setFont(new Font("微软雅黑", Font.PLAIN, 13));// 8.第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)gd.drawString("设备编号:"+code, 140, 74);gd.dispose();// 9. 输出图片ServletOutputStream outputStream = response.getOutputStream();ImageIO.write(image, imageFormat,outputStream );outputStream.flush();outputStream.close();}/*** 生成底图以及二维码* @param content 要生成的二维码字符串* @param bytes 底图的字节数组 可以通过其它形式生成 Image 对象* @return* @throws Exception*/public static BufferedImage addBaseMap(String content,byte[] bytes) throws Exception {//1.数组转化为图片Image srcImg = ImageIO.read(new ByteArrayInputStream(bytes));//获取图片的宽int srcImgWidth = srcImg.getWidth(null);//获取图片的高int srcImgHeight = srcImg.getHeight(null);//2.生成底图BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);//3.使用工具类生成二维码Image image = getBufferedImage(content);//4.将小图片绘到大图片上,15,45  表示你的小图片在大图片上的位置。g.drawImage(image, 15, 45, null);//设置颜色。g.setColor(Color.WHITE);g.dispose();return bufImg;}/*** 生成二维码* @param content* @return*/public static BufferedImage getBufferedImage(String content) {initialParams();BufferedImage bufferedImage = null;try {//参数为 字符串参数 二维码格式 宽 高 二维码入参BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width,height,encodeHits);bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);} catch (WriterException e) {e.printStackTrace();return null;}return bufferedImage;}
}

3.controller请求测试

@ApiOperation("根据文件名下载")
@ApiImplicitParams({@ApiImplicitParam(name = "code", value = "code", dataType = "string", paramType = "query", required = true),
})
@GetMapping(value="/createNewQRCodeByCode")
public void createNewQRCodeByCode(HttpServletRequest request, HttpServletResponse response,String code){try{//因为我的照片都存在了minio所以就直接从minio获取就行了byte[] bytes = minioTemplate.getObject("733202765131681792.png");response.setHeader("content-disposition", "attachement;filename="+URLEncoder.encode(code, "utf-8"));response.setContentType("application/octet-stream;charset=UTF-8");QRcodeImageFont.drawString(code,response,bytes);}catch(Exception e){log.error("根据文件名下载时异常",e);}
}

参考了博主

https://blog.csdn.net/qq_38377774/article/details/108767573?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166392315716782390589650%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166392315716782390589650&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-6-108767573-null-null.142v50control_1,201v3control_1&utm_term=java%E5%9C%A8%E5%9B%BE%E7%89%87%E4%B8%8A%E7%94%9F%E6%88%90%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%9B%BE%E7%89%87&spm=1018.2226.3001.4187

java在底图上生成二维码以及文字相关推荐

  1. java生成二维码(在图片上生成二维码(二维码带logo)并且在图片上添加文字标签)

    1pom.xml <!--生成二维码--> <dependency><groupId>cn.hutool</groupId><artifactId ...

  2. java实现后台直接生成二维码图片并直接上传到七牛云上面

    java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...

  3. Java(Spring boot)实现生成二维码

    文章目录 一.引入spring boot依赖: 二.工具类代码: 三.调用工具类生成二维码 1.将链接生成二维码图片并保存到指定路径 2.将链接生成二维码直接显示在页面 3.将以get请求传参链接生成 ...

  4. java 简单快速的生成二维码(带图片)

    **使用java+zxing 简单快速的生成二维码.** 效果图: 首先需要引入两个jar文件: <dependency><groupId>commons-codec</ ...

  5. java 根据指定链接生成二维码

    需求: 就是需要把一个报告网址链接生成二维码,然后渲染在报告中,扫描二维码的时候能访问到这个报告,效果就达到了 1.首先提前需要添加的maven依赖 <!-- https://mvnreposi ...

  6. Django3在网页上生成二维码

    说明 自用Django3版本,但是百度搜索,搜到的生成二维码的教材都是老版本了,而且用的byteio在django3中也删了,就走了很多歪路. 最后上谷歌搜了一下,发现又更便捷的方法,故分享到这里来 ...

  7. JAVA使用ZPL命令生成二维码

    1.将生成二维码的命令放在一个txt文件中 命令如下: ^XA^PMY #开启镜像 ^JMB #设置打印机每毫秒打印点数 ^FO250,175 #设置显示字母位置 ^CF0,60 #设置字体大小 ^F ...

  8. java通过js实现生成二维码(最强攻略!)

    js生成二维码 1.导入qrcode.js <script src="qrcode.js"></script> qrcode.js源码如下(忘记出处了) / ...

  9. 生成二维码附带文字信息

    生成二维码写入PDF文件 目录 生成二维码写入PDF文件 前言 一.引入依赖 二.生成二维码 1.创建实体类 2.创建QRCodeUtil 3.生成单条二维码 4.批量生产二维码 三.生成二维码写入P ...

最新文章

  1. 分词器 keras.preprocessing.text.Tokenizer
  2. JSP中base href=%=basePath%作用
  3. 介绍一下《windows安全性编程》之一
  4. 利用python爬虫(part1)--urllib.request模块
  5. knockoutJS学习笔记01:从拼接字符串到编写模板引擎
  6. 潮流渐变色彩的UI插画素材,吸睛没毛病
  7. 梅特勒托利多xk3124电子秤说明书_托利多电子秤使用说明
  8. 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...
  9. ie浏览器float right 向下错位解决办法
  10. PostgreSQL DELETE 大表性能 explain 测试
  11. ACL 2020投稿破 3 千,到底有多少人在做 NLP 研究?
  12. @property的相关属性
  13. 多区域OSPF基本配置
  14. 袁玉玮:简介人工智能在基金界的应用现状(四)
  15. 软件工程期末考试题库(超全)
  16. java 代码实现加锁_java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)...
  17. android获取网页标题,android获取系统自带浏览器书签
  18. Spring框架中 自动装配的详解 属性值的详解
  19. poi读取Excel时日期为数字 的解决方法
  20. 使用layui做二级菜单,选父级必选子级

热门文章

  1. A27-张韶中网页前端3
  2. 转:vsphere序列号
  3. 【论文学习笔记-6】立体匹配:MGM(More global matching)和R3SGM(Real-time Raster-Respecting global matching)
  4. 控制台推箱子小游戏C语言
  5. zotero中引用文献格式修改
  6. 汇编_修改中断向量表_自定义中断
  7. Python爬虫入门教程 3-100 美空网数据爬取
  8. Android2019最佳app,主流安卓市场自荐资源大合集|2019最新最全
  9. ejs html 模版lt;%- include,EJS模板引擎
  10. 微信小程序中使用icon font图标