导入相关的jar包

<!--Qrcode creator--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.2</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>

绘制带头像的二维码

public class QrCodeCreator {/*** 创建带有Logo的二维码** @param logoUrl logo的url* @param jumpUrl 跳转的url* @param params  跳转参数* @return {@link byte[]}*/public static byte[] createLogoQrCode(String logoUrl, String jumpUrl, Map<String, String> params) {// 1、设置二维码的一些参数HashMap<EncodeHintType, Object> hints = new HashMap<>(8);// 1.1设置字符集hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 1.2设置容错等级;因为有了容错,在一定范围内可以把二维码p成你喜欢的样式hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 1.3设置外边距,二维码与白色区域;(即白色区域)hints.put(EncodeHintType.MARGIN, 1);// 2、生成二维码try {// 2.1定义BitMatrix对象BitMatrix bitMatrix = new MultiFormatWriter().encode(RequestUrlBuilder.buildRequestUrl(jumpUrl, params), BarcodeFormat.QR_CODE, GlobalConstant.QRCORD_WIDTH, GlobalConstant.QRCORD_HEIGHT, hints);//2、获取二维码宽高int codeWidth = bitMatrix.getWidth();int codeHeight = bitMatrix.getHeight();//3、将二维码放入缓冲流BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);for (int i = 0; i < codeWidth; i++) {for (int j = 0; j < codeHeight; j++) {//4、循环将二维码内容定入图片image.setRGB(i, j, bitMatrix.get(i, j) ? GlobalConstant.BLACK : GlobalConstant.WHITE);}}BufferedImage logoImage = null;try {URL url = new URL(logoUrl);logoImage = ImageIO.read(url);// 2.4在二维码中添加logo} catch (Exception e) {e.printStackTrace();}return addLogo(image, logoImage);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/*** 添加logo** @param logoImage   标志形象* @param qrcodeImage qrcode形象* @return {@link byte[]}*/private static byte[] addLogo(BufferedImage qrcodeImage, BufferedImage logoImage) {try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {if (logoImage == null) {Thumbnails.of(qrcodeImage).scale(1).outputFormat("jpg").toOutputStream(outputStream);return outputStream.toByteArray();}// 3、计算图片放置的位置int x = (qrcodeImage.getWidth() - GlobalConstant.LOGO_WIDTH) / 2;int y = (qrcodeImage.getHeight() - GlobalConstant.LOGO_HEIGHT) / 2;//白底与头像的距离int logoBorder = 10;//画一个透明的外圈BufferedImage whiteBase = new BufferedImage(GlobalConstant.LOGO_WIDTH, GlobalConstant.LOGO_HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics2D graphics = whiteBase.createGraphics();//设置颜色graphics.setColor(Color.WHITE);//填充graphics.fillRect(0, 0, whiteBase.getWidth(), whiteBase.getHeight());graphics.drawImage(whiteBase, 0, 0, GlobalConstant.LOGO_WIDTH, GlobalConstant.LOGO_HEIGHT, null);graphics.dispose();//绘画白底,设置圆角Graphics2D graphics2 = qrcodeImage.createGraphics();graphics2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);int padding = logoBorder / 2;graphics2.setClip(new RoundRectangle2D.Double(x - padding, x - padding, GlobalConstant.LOGO_WIDTH, GlobalConstant.LOGO_HEIGHT, 15, 15));graphics2.drawImage(whiteBase, x - padding, x - padding, GlobalConstant.LOGO_WIDTH, GlobalConstant.LOGO_HEIGHT, null);graphics2.dispose();// 1、读取二维码图片,并构建绘图对象Graphics2D graph = qrcodeImage.createGraphics();graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);graph.setClip(new RoundRectangle2D.Double(x, y, GlobalConstant.LOGO_WIDTH - logoBorder, GlobalConstant.LOGO_HEIGHT - logoBorder, 15, 15));// 4、绘制图片graph.drawImage(logoImage, x, y, GlobalConstant.LOGO_WIDTH - logoBorder, GlobalConstant.LOGO_HEIGHT - logoBorder, null);graph.dispose();Thumbnails.of(qrcodeImage).scale(1).outputFormat("jpg").toOutputStream(outputStream);return outputStream.toByteArray();} catch (Exception e) {e.printStackTrace();}return null;}}

RequestUrlBuilder.java

public class RequestUrlBuilder {public static String buildRequestUrl(String url, Map<String, String> params) {if (params == null || params.isEmpty()) {return url;}StringBuilder builder = new StringBuilder();// 如果以/结果,去掉/if (url.endsWith("/")) {builder.append(url, 0, url.length() - 1);} else {builder.append(url);}if (!(url.endsWith("?") || url.endsWith("&"))) {if (url.contains("?")) {builder.append("&");} else {builder.append("?");}}return builder.append(buildQuery(params)).toString();}
}

测试代码:

 @Testpublic void drawQrcode() {byte[] bytes = QrCodeCreator.createLogoQrCode("https://liaomr.com/img/photo.jpg", "https://liaomr.com/", null);try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes)) {Thumbnails.of(byteArrayInputStream).scale(1).toFile("D:\\qrcode.jpg");} catch (IOException e) {e.printStackTrace();}}

最终结果:

Java 绘制带圆角头像的二维码相关推荐

  1. java 生成带网络头像的二维码

    最近做一个带微信头像的二维码的功能,微信头像是一个链接,所以先把微信头像下载,临时保存,生成二维码 /*** 文件下载工具类** @author zhengxinghua*/ public class ...

  2. Python生成带圆角图片的二维码

    示例代码1 #!/usr/bin/python # -*- coding: UTF-8 -*- # author: Carl time:2020/5/15import qrcode from PIL ...

  3. Java 代码基于开源组件生成带头像的二维码

    二维码在我们目前的生活工作中,随处可见,日常开发中难免会遇到需要生成二维码的场景,网上也有很多开源的平台可以使用,不过这里我们可以通过几个开源组件,自己来实现一下. 在动手之前我们先思考一下需要进行的 ...

  4. Java 代码基于开源组件生成带头像的二维码,推荐收藏

    二维码在我们目前的生活工作中,随处可见,日常开发中难免会遇到需要生成二维码的场景,网上也有很多开源的平台可以使用,不过这里我们可以通过几个开源组件,自己来实现一下. 在动手之前我们先思考一下需要进行的 ...

  5. uniapp之小程序端生成分享海报(带自定义参数的二维码)

    内容需求: 小程序端生成一个海报,海报内容包括当前授权账号的头像,当前授权账号的邀请码,一张特定图片,分享页面的带对应参数的小程序二维码:生成的海报需要保存到本地 功能方法: 1.前端用canvas绘 ...

  6. JAVA 生成数据表图标LOGO二维码

    JAVA 生成数据表图标LOGO二维码 private static final int QRCOLOR = 0xFF000000; // 默认是黑色private static final int ...

  7. 小程序识别带多个参数二维码进入商品详情

    小程序识别带多个参数二维码进入商品详情 前提: 因为在商品详情页面中有个一功能是点击分享生成海报,海报上面有商品信息以及商品小程序码,用户通过将海报分享给别人的时候,那个人可以通过识别那个商品小程序码 ...

  8. java与前端实现7种二维码

    OC](java与前端实现7种二维码) 1.项目结构 springboot项目 2.后端 QrcodeController package com.ljs.controller;import com. ...

  9. 批量制作带LOGO的网址二维码

    现在我们的生活中随处可见二维码的身影,扫码付款,扫描进入小程序,扫码关注等等.二维码可以存储各种信息,主要包括网址.名片.文本信息.特定代码等.今天跟大家分享使用条码软件批量制作带LOGO的网址二维码 ...

最新文章

  1. 程序员吐槽:非常后悔3年前选择加入互联网行业,因为短期的高工资断送了自己长期的职业生涯发展...
  2. Oracle视图添加约束,Oracle的约束视图
  3. 60条令你大吃一惊的小常识,很有用
  4. Create C++ Windows Forms Application in Visual Studio 2017
  5. elif在python中啥意思_python中elif 结构语句怎么判断?
  6. ToolPart的简单开发
  7. ArcEngine判断要素(feature)是否为multipart feature及分解(炸开)代码
  8. leetcode 1207. 独一无二的出现次数(map+set)
  9. 外设键盘_记得那个被称为‘顶级外设’的国产品牌吗,现在推出这样一把键盘...
  10. Python科学计算库numpy中的add运算
  11. [Data Structure Algorithm] 有向无环图的拓扑排序及关键路径
  12. 10. 二进制中1的个数(C++版本)
  13. Redis集群添加数据报错(error) CLUSTERDOWN The cluster is down
  14. Android NFC 标签 读写
  15. C语言 输出数组中的全部元素的三种方法
  16. TeamTalk服务器编译与部署
  17. Ubuntu16.04安装网易云音乐后打不开
  18. 2014年全球手游市场发展的六大趋势
  19. 长园创新研究院 招聘FPGA高级工程师
  20. JavaWeb书城项目(一)

热门文章

  1. SpringBoot mybatis多数据源配置,记录下我磕磕碰碰的三个月找工作经历
  2. Allegro PCB Design GXL (legacy) - 导出 PCB 中元件的坐标文件
  3. VIVO手机测试指令代码大全
  4. (八)理解迭代思维(80)
  5. STM32 CAN通信的学习笔记总结(从小白开始)
  6. linux查看文件内容常用命令
  7. OSS视频上传后直接播放只有声音没有画面
  8. 西门子SMART200程序 PID的控制写法,突破8路
  9. 韩国区块链步入快车道:SM、Kakao、三星、LG等巨头ALL IN
  10. 优惠券通用测试要点 V1.1