maven

​<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>2.2</version>
</dependency>

工具类


import cn.hutool.core.codec.Base64Encoder;
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;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;public class QRCodeUtils {/*** 生成二维码**/public static BufferedImage getImg(String content, int size) throws Exception {//其他参数,如字符集编码Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//容错级别(H为最高级别)hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//白边的宽度,可取0~4hints.put(EncodeHintType.MARGIN, 1);//生成矩阵BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, 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);}}return image;}/*** 二维码byte**/public static byte[] getByte(BufferedImage img) throws Exception {ByteArrayOutputStream bao = new ByteArrayOutputStream();ImageIO.write(img, "png", bao);return bao.toByteArray();}/*** 二维码带logo*/public static BufferedImage withLogo(BufferedImage img, String logoPath) throws IOException {int matrixWidth = img.getWidth();int matrixHeigh = img.getHeight();//读取Logo图片BufferedImage logo = ImageIO.read(new File(logoPath));//读取二维码图片,并构建绘图对象Graphics2D g2 = img.createGraphics();//开始绘制图片g2.drawImage(logo,matrixWidth/5*2,matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5, null);BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);// 设置笔画对象g2.setStroke(stroke);//指定弧度的圆角矩形RoundRectangle2D.Float round = new RoundRectangle2D.Float(matrixWidth/5*2, matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5,20,20);g2.setColor(Color.white);// 绘制圆弧矩形g2.draw(round);//设置logo 有一道灰色边框BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);// 设置笔画对象g2.setStroke(stroke2);RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(matrixWidth/5*2+2, matrixHeigh/5*2+2, matrixWidth/5-4, matrixHeigh/5-4,20,20);g2.setColor(new Color(128,128,128));// 绘制圆弧矩形g2.draw(round2);/*底部文字代码个性化较坑,考虑不能太长,字体大小问题,还是自行封装吧String text = "底部的文字!";int fontSize = 30;if (StringUtils.isNotEmpty(text)) {//新的图片下面加上文字BufferedImage outImage = new BufferedImage(matrixWidth, matrixHeigh+fontSize+10, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D outg = outImage.createGraphics();//画二维码到新的面板outg.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);outg.setColor(Color.BLACK);//字体、字型、字号outg.setFont(new Font("宋体",Font.BOLD,fontSize));int strWidth = outg.getFontMetrics().stringWidth(text);//画文字到新的面板outg.drawString(text, (matrixWidth-strWidth)/2 , matrixHeigh+(outImage.getHeight()-matrixHeigh)/2+10);outg.dispose();outImage.flush();img = outImage;}*/g2.dispose();img.flush();return img;}}

测试

public static void main(String[] args) throws Exception {//ImageIO.write(QRCodeUtils.getImg("a", 600), "jpg", new File("/develop/data/test/qr.jpg"));//ImageIO.write(QRCodeUtils.withLogo( QRCodeUtils.getImg("a", 600), "/develop/data/test/log.png" ),//        "png", new File("/develop/data/test/qr.png"));//发现ImageIO方法jpg图片较大,直接用byteOutputStream out = new FileOutputStream("/develop/data/test/qr.jpg");out.write(QRCodeUtils.getByte(QRCodeUtils.withLogo( QRCodeUtils.getImg("a", 300), "/develop/data/test/log.png" )));out.flush();out.close();//用base64//OutputStream out = new FileOutputStream("/develop/data/test/qr.jpg");//out.write(Base64.decodeBase64(//        Base64.encodeBase64String(//                QRCodeUtils.getByte(getImg("a", 600))//        )//));//out.flush();//out.close();}

另附hutool的QrCodeUtil

java 生成二维码,带logo,底部文字相关推荐

  1. Java生成二维码带LOGO底部标题竖版字体

    前言 Java后端生成二维码 底部 侧面带有标题,可调节字号 参考文章 使用Java生成二维码图片(亲测) Reborn_YY使用Java生成二维码图片 图标素材库 Java后台生成图片,前台实现图片 ...

  2. [Java] Java生成二维码带LOGO, LOGO加圆角白框

    先来看看效果: 实现: 生成指定文字内容的二维码 二维码中间嵌入LOGO 二维码做圆角和白色边框处理 新需求不断, 这不, 又来了个想生成带用户头像的需求. 蛮简单的- 在这里造完轮子分享给大家 因为 ...

  3. java生成二维码(带logo)

    利用hutool工具实现java二维码生成 官网链接:https://www.hutool.cn/ 添加依赖 <dependency><groupId>cn.hutool< ...

  4. ZXing3.3.3 生成二维码带logo

    一.前言 我们这里对ZXing不做过多介绍,不清楚的小伙伴可以自行百度. 直接进入正题,这里会封装成工具使用: 二.Hutool工具包+ZXing 这里我们使用Hutool工具包+ZXing,Huto ...

  5. asp.net 生成二维码,带logo,带下方文字

    目标可以生成带网址的信息的二维码,可以是带logo 或者不带logo,或者下方带一行说明文字 nuget 下载二维码管理包 public static Bitmap GenerateQrCode(st ...

  6. vue 生成二维码(带logo)与条形码

    1.生成二维码安装 npm install  --save qrcodejs 实现代码 <template><div><qrcode :url="jmc&quo ...

  7. zxing 生成二维码 带logo

    ·1生成带logo的二维码,并转base64 public static String generateBase64Img(String code_url,int width,int height,S ...

  8. Java生成二维码底部带文字并且返回前端使用img接收

    目录 1.java生成二维码工具类 2.web测试 3.前端处理 4.测试结果 背景 本demo主要针对jdk1.6版本的,但是高版本的同样可以用,如果觉得不舒服可以自行添加高版本的依赖包. 准备工具 ...

  9. java 生成二维码后叠加LOGO并转换成base64

    1.代码 见文末推荐 2.测试 测试1:生成base64码 public static void main(String[] args) throws Exception {String data = ...

  10. Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码

    Java 生成二维码 zxing生成二维码 条形码 服务端生成二维码 Java生成条形码 一.关于ZXing 1.ZXing是谷歌开源的支持二维码.条形码 等图形的生成类库:支持生成.和解码功能. G ...

最新文章

  1. 使用rar备份mysql_用RAR备份源代码_用WSH备份数据库
  2. oracle11g程序调优纪实
  3. VTK:图表之ColorEdges
  4. 先学c语言还是先学java_是先学 java好还是先学c语言好
  5. 自定义背景android,Android自定义Button并设置不同背景图片的方法
  6. 走访近20家代工厂后:近千块的大牌T恤,成本只要几十块
  7. HarmonyOS常见问题解答
  8. 财物机器人英文ppt演讲课件_“如何恰当使用课件动画”
  9. 清华,北大坐实亚洲大学Top2,泰晤士2020亚洲大学榜
  10. 小红书再度出拳整治医美 首批处置违规笔记27.9万篇
  11. Cygwin中解决vi编辑器方向键和Backspace键不好使、安装vim的方法
  12. Sliding Window 单调队列解决--经典滑动窗口问题--求窗口的最大值最小值
  13. 简单之美 | ZooKeeper应用案例
  14. Java入门电子书百度网盘下载,附面试答案
  15. 文达仓库管理软件 v5.32 网络版 怎么用
  16. css中的flex(弹性)布局
  17. 从古代遗传下来的设计值得一看!
  18. 旅游类的APP原型模板分享——Priceline
  19. 带你全面掌握高级知识点!一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?年薪50W
  20. 安卓手机如何快速投屏到windows(10/8.1/7)电脑上

热门文章

  1. Typora 上传图片的自定义命令实现
  2. Cadence Allegro SPB 16.5 完整下载 网盘(含破解)
  3. excel服务器2010网站,勤哲Excel服务器2010高级企业版完整安装包
  4. 【JSP内置对象】之9大内置对象(JavaWeb必背必掌握)
  5. matlab钢琴音教程,弹琴吧 - 今天聊一聊钢琴扒带及MIDI制作,使用音
  6. 重装Win10系统(加破解)+装Ubuntu18.04双系统
  7. 电脑屏幕变色了怎么调回来,电脑屏幕颜色怎么改
  8. matlab 2020b linux版本 下载
  9. 【读书笔记《Bootstrap 实战》】4.企业网站
  10. Docker 网易镜像仓库使用