1. 首先我们需要导入 Google 的 zxing 包,maven库中可以搜到
 <!-- 二维码支持包 --><!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version><scope>compile</scope></dependency>
  1. 找一张需要放在二维码中间的图片,不选也可以,就是生成后的图片太单调了
package com.jane.util;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/*** @ClassName QRCodeUtil* @Description TODO* @Author jzm* @Date : 2020/7/2 14:09**/
public class QRCodeUtil {// 二维码颜色==黑色private static final int BLACK = 0xFF000000;// 二维码颜色==白色private static final int WHITE = 0xFFFFFFFF;// 二维码图片格式==jpg和png两种private static final List<String> IMAGE_TYPE = new ArrayList<>();static {IMAGE_TYPE.add("jpg");IMAGE_TYPE.add("png");}/*** zxing方式生成二维码* 注意:* 1,文本生成二维码的方法独立出来,返回image流的形式,可以输出到页面* 2,设置容错率为最高,一般容错率越高,图片越不清晰, 但是只有将容错率设置高一点才能兼容logo图片* 3,logo图片默认占二维码图片的20%,设置太大会导致无法解析** @param content  二维码包含的内容,文本或网址* @param path     生成的二维码图片存放位置* @param size     生成的二维码图片尺寸 可以自定义或者默认(250)* @param logoPath logo的存放位置*/public static boolean zxingCodeCreate(String content, String path, Integer size, String logoPath) {try {System.out.println("开始生成二维码");//图片类型String imageType = "jpg";//获取二维码流的形式,写入到目录文件中BufferedImage image = getBufferedImage(content, size, logoPath);//获得随机数Random random = new Random();//生成二维码存放文件File file = new File(path + random.nextInt(1000) + ".jpg");if (!file.exists()) {file.mkdirs();}ImageIO.write(image, imageType, file);System.out.println("二维码生成成功");return true;} catch (IOException e) {e.printStackTrace();System.out.println("二维码生成失败");return false;}}/*** 二维码流的形式,包含文本内容** @param content  二维码文本内容* @param size     二维码尺寸* @param logoPath logo的存放位置* @return*/public static BufferedImage getBufferedImage(String content, Integer size, String logoPath) {if (size == null || size <= 0) {size = 250;}BufferedImage image = null;try {// 设置编码字符集Map<EncodeHintType, Object> hints = new HashMap<>();//设置编码hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置容错率最高hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.MARGIN, 1);// 1、生成二维码MultiFormatWriter multiFormatWriter = new MultiFormatWriter();BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, size, size, hints);// 2、获取二维码宽高int codeWidth = bitMatrix.getWidth();int codeHeight = bitMatrix.getHeight();// 3、将二维码放入缓冲流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) ? BLACK : WHITE);}}//判断是否写入logo图片if (logoPath != null && !"".equals(logoPath)) {File logoPic = new File(logoPath);if (logoPic.exists()) {Graphics2D g = image.createGraphics();BufferedImage logo = ImageIO.read(logoPic);int widthLogo = logo.getWidth(null) > image.getWidth() * 2 / 10 ? (image.getWidth() * 2 / 10) : logo.getWidth(null);int heightLogo = logo.getHeight(null) > image.getHeight() * 2 / 10 ? (image.getHeight() * 2 / 10) : logo.getHeight(null);int x = (image.getWidth() - widthLogo) / 2;int y = (image.getHeight() - heightLogo) / 2;// 开始绘制图片g.drawImage(logo, x, y, widthLogo, heightLogo, null);g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15);//边框宽度g.setStroke(new BasicStroke(2));//边框颜色g.setColor(Color.WHITE);g.drawRect(x, y, widthLogo, heightLogo);g.dispose();logo.flush();image.flush();}}} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return image;}public static void main(String[] args) {//扫码跳转路径String smUrl = "www.baidu.com";//二维码保存路径String qrCodeUrl = "G:\\img\\QRcodeImg\\";Integer size = 500;String imgUrl = "G:\\img\\qq.jpg";QRCodeUtil.zxingCodeCreate(smUrl, qrCodeUrl, size, imgUrl);}
}

java 生成二维码图片相关推荐

  1. 使用Java生成二维码图片(亲测)

    下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...

  2. 使用Java生成二维码图片

    下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...

  3. Java - 生成二维码图片

    文章目录 生成二维码图片 参考 生成二维码图片 新建 Maven Project,引入依赖: <dependency><groupId>com.google.zxing< ...

  4. java生成二维码图片(有logo),并在图片下方附文字

    logo配置类 /*** Created by Amber Wang on 2017/11/27 17:25.*/import java.awt.*;public class LogoConfig { ...

  5. java生成二维码图片、转base64

    本文介绍通过java把文字或url生成二维码,使用浏览器或者微信扫一扫即可获得文字或url内容,超简单的方法,两个步骤复制粘贴即可使用. 注意:内容是文字会直接显示,如果内容为url地址那么会直接访问 ...

  6. springboot+java生成二维码图片

    接下来将从IDEA创建springboot项目到生成效果图详细地为大家展示二维码的制作过程 1.首先是创建springboot项目 上面的图有红色标记的地方需要填写的,比如项目存放的路径,包名等,其他 ...

  7. JAVA 生成二维码图片 可加Logo

    现在二维码在很多地方有运用,在这里写一份简洁明快的代码,方便以后使用.有需要的朋友可以直接复制过去 直接使用 所需要的jar:QRCode.jar jar下载地址:点击打开链接 package QrC ...

  8. Java生成二维码图片,手机软件扫码后跳转网页

    一.创建maven工程,添加如下依赖 <dependencies><dependency><groupId>com.google.zxing</groupId ...

  9. java springboot生成二维码图片

    java生成二维码图片 Maven依赖 <!--生成二维码--> <dependency><groupId>com.google.zxing</groupId ...

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

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

最新文章

  1. 《数据科学:R语言实现》——第1章 R中的函数
  2. 从保证业务不中断,看网关的“前世今生”
  3. lia人是什么意思_老话说“人穷别说话,位卑莫劝人”,什么意思?有何道理?...
  4. ArchSummit微课堂|蘑菇街DevOps实践及心路历程分享
  5. Win7中如何删除访问共享时所保存的用户名和密码
  6. 部署桌面虚拟化时要考虑的因素
  7. 使用jmeter测试接口
  8. ~~遗传算法最最最最简单的实例~~
  9. steam的APEX客户端的游戏账号已遭禁用_玩个游戏也能被黑客盯上?电脑设备一不小心就沦为“肉鸡”。...
  10. 计算机二级2018VB题库百度云,2018年春江苏省计算机二级VB考试真题第1套
  11. linux数学软件,使用这些Linux应用来征服你的数学学习
  12. 什么是万物互联(IoE)?与物联网(IoT)的区别是什么?
  13. APP消息推送(Push),竟然还有这么多你不知道的
  14. 小程序AppId-当前开发者未绑定此AppId,请到小程序管理后台操作后重试
  15. 利用python爬取数据并保存到MySQL中
  16. 全国海选第三期:广州赛区节目视频
  17. HDU - 5894 hannnnah_j’s Biological Test 组合数(插板法)
  18. linux平台的mmdetection安装
  19. C# Dev利用TreeList设置菜单导航并双击节点打开模块窗体
  20. AI—2017大数据版图发布:AI、大数据与云计算结合是大势所趋

热门文章

  1. 人际关系差不能当跳槽理由,原因在这里
  2. 广东省考计算机类的比例,广东公务员考试22.4万人参加 竞争比例为19:1
  3. GitHub 的 Pull Request 是指什么意思
  4. kali之beef的使用
  5. 计算机自动关机启机唤醒设置,电脑定时自动关机怎么设置
  6. codeup21158 循环比赛日程表
  7. 地下停车场的车内与车外,揭露了中年男人内心最沉重的痛
  8. 基于HTML5移动app开发教程一
  9. Linux的远程管理协议是什么,2-Linux权限与远程管理
  10. 《决战大数据》读书笔记(一) 收集数据和使用数据要有关联