首先引入Jar包:

<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.2.1</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version>
</dependency>

然后开始撸代码

package com.zxtg.zshop.common;import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;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.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;public class MatrixToImageWriterEx {private static final MatrixToLogoImageConfig DEFAULT_CONFIG = new MatrixToLogoImageConfig();/*** 根据内容生成二维码数据* @param content 二维码文字内容[为了信息安全性,一般都要先进行数据加密]* @param width 二维码照片宽度* @param height 二维码照片高度* @return*/public static BitMatrix createQRCode(String content, int width, int height){Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();   //设置字符编码hints.put(EncodeHintType.CHARACTER_SET, "utf-8");  // 指定纠错等级hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);BitMatrix matrix = null;  try {  matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); } catch (WriterException e) {  e.printStackTrace();  }return matrix;}/*** 写入二维码、以及将照片logo写入二维码中* @param matrix 要写入的二维码* @param format 二维码照片格式* @param imagePath 二维码照片保存路径* @param logoPath logo路径* @throws IOException*/public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath) throws IOException {MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());//添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象BufferedImage img = ImageIO.read(new File(imagePath));MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, DEFAULT_CONFIG);}/*** 写入二维码、以及将照片logo写入二维码中* @param matrix 要写入的二维码* @param format 二维码照片格式* @param imagePath 二维码照片保存路径* @param logoPath logo路径* @param logoConfig logo配置对象* @throws IOException*/public static void writeToFile(BitMatrix matrix, String format, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) throws IOException {MatrixToImageWriter.writeToFile(matrix, format, new File(imagePath), new MatrixToImageConfig());//添加logo图片, 此处一定需要重新进行读取,而不能直接使用二维码的BufferedImage 对象BufferedImage img = ImageIO.read(new File(imagePath));MatrixToImageWriterEx.overlapImage(img, format, imagePath, logoPath, logoConfig);}/*** 将照片logo添加到二维码中间* @param image 生成的二维码照片对象* @param imagePath 照片保存路径* @param logoPath logo照片路径* @param formate 照片格式*/public static void overlapImage(BufferedImage image, String formate, String imagePath, String logoPath, MatrixToLogoImageConfig logoConfig) {try {BufferedImage logo = ImageIO.read(new File(logoPath));Graphics2D g = image.createGraphics();//考虑到logo照片贴到二维码中,建议大小不要超过二维码的1/5;int width = image.getWidth() / logoConfig.getLogoPart();int height = image.getHeight() / logoConfig.getLogoPart();//logo起始位置,此目的是为logo居中显示int x = (image.getWidth() - width) / 2;int y = (image.getHeight() - height) / 2;//绘制图g.drawImage(logo, x, y, width, height, null);//给logo画边框//构造一个具有指定线条宽度以及 cap 和 join 风格的默认值的实心 BasicStrokeg.setStroke(new BasicStroke(logoConfig.getBorder()));g.setColor(logoConfig.getBorderColor());g.drawRect(x, y, width, height);g.dispose();//写入logo照片到二维码ImageIO.write(image, formate, new File(imagePath));} catch (Exception e) {e.printStackTrace();}}}

最后我们调用QrcodeGenerator.encode方法一下:

package com.zxtg.zshop.util;import java.awt.Color;
import java.awt.image.BufferedImage;import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.zxtg.zshop.common.MatrixToImageWriterEx;public class QrcodeGenerator {public static BufferedImage encode(String content, int width, int height) {try {BitMatrix matrix = MatrixToImageWriterEx.createQRCode(content, width, height);BufferedImage image = MatrixToImageWriter.toBufferedImage(matrix);return image;} catch (Exception e) {e.printStackTrace();}return null;}
}

MatrixToLogoImageConfig 类

package com.zxtg.zshop.common;
import java.awt.Color;public class MatrixToLogoImageConfig {//logo默认边框颜色public static final Color DEFAULT_BORDERCOLOR = Color.RED;//logo默认边框宽度public static final int DEFAULT_BORDER = 1;//logo大小默认为照片的1/5public static final int DEFAULT_LOGOPART = 5;private final int border = DEFAULT_BORDER;private final Color borderColor;private final int logoPart;/*** Creates a default config with on color {@link #BLACK} and off color* {@link #WHITE}, generating normal black-on-white barcodes.*/public MatrixToLogoImageConfig() {this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);}public MatrixToLogoImageConfig(Color borderColor, int logoPart) {this.borderColor = borderColor;this.logoPart = logoPart;}public Color getBorderColor() {return borderColor;}public int getBorder() {return border;}public int getLogoPart() {return logoPart;}
}

Java二维码生成代码相关推荐

  1. java二维码生成代码_java快速开发平台功能特点之代码生成器

    要说做代码生成器的初衷,还是因为在做公司项目的时候,有太多的功能页面需要处理,在前后端上面,虽然也选择了一个基础的SSH框架系统作为基础,但还是耗费了大量的时间去一点点补代码,再加上业务的需求并不是非 ...

  2. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍  这里我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream o ...

  3. java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载

    java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成.解析.下载 自己用java搭建一个属于自己APP二维码合成网站.我的思路是这样的: 1.用户在前台表单提交APP的IOS和Andro ...

  4. 【笔记11】uniapp点击复制;mysql数据库存储emoji表情;Java 二维码生成;uniapp引入自定义图标

    目录 前言 一.uniapp 实现点击复制某段文本 二.MySQL 数据库存储 emoji 表情 三.Layui 的富文本编辑器 四.谷歌 Java 二维码生成 (1) 引入 MAVEN 依赖 五.微 ...

  5. java二维码生成技术

    自从微信扫描出世,二维码扫描逐渐已经成为一种主流的信息传递和交换方式.下面就介绍一下我学习到的这种二维码生成方式.预计再过不久身份证户口本等都会使用二维码识别了,今天就做一个实验案例: 二维码主要实现 ...

  6. Java—二维码生成与识别(一)

    一.二维码生成 思路:将字符串中的每个字符转为二进制码字符串,保存在二进制码字符串数组中.对二进制码字符串数组中的每个二进制码字符串进行字符遍历,若是'0',则设置画笔颜色为白色,若是'1',则设置画 ...

  7. java 二维码生成及其标签打印

    本文主要内容 二维码生成 二维码标签预览及打印 二维码生成 笔者此次的二维码是通过调用第三方接口生成的,具体流程如下: 根据规范要求调用第三方接口,返回二维码下载地址及二维码图片的属性值(图片大小等) ...

  8. java 二维码生成和加密base64压码

    因为项目中要实现扫描二维码并实现登录,但本人开发的模块是服务器,跟前台传输用到的主要是json对象.所以不能直接传输图片,必须把图片加密成base64压码的形式. 首先介绍二维码生成的代码,二维码生成 ...

  9. java 二维码生成和解析

    2019独角兽企业重金招聘Python工程师标准>>> <!-- 二维码 --><dependency><groupId>com.google.z ...

  10. java二维码生成并可以转换

    二维码很常见,简单的二维码生成 pom中导入两个包 <!--二维码--><dependency><groupId>com.google.zxing</grou ...

最新文章

  1. 20个非常有用的Java程序片段
  2. go语言中append函数的使用
  3. python类方法继承_对python中类的继承与方法重写介绍
  4. ROS学习(九)—— rqt_console 和 roslaunch
  5. Spark _09资源调度和任务调度
  6. json和字符串/数组/集合的互相转换の神操作总结
  7. 阿里云交通数据中台解决方案打造“数字化生产力”
  8. 使用Qt Creator 2.60编写C/C++程序
  9. Android Studio Xposed模块编写(一)
  10. 微信微调助手WeChatTweak for mac(微信多开和防撤回工具)最新版
  11. String 转 jsonObject
  12. CSS:使用媒体查询进行网页元素的缩放
  13. 计算机多媒体的发展,计算机多媒体技术的现状及发展前景
  14. crt计算机显示器,crt显示器最高分辨率_crt显示器最高刷新率
  15. FP-Tree频繁模式树算法
  16. 关于高电平与低电平的使用
  17. 家用计算机硬件升级方案,旧电脑如何升级?旧电脑配置升级推荐方案
  18. C语言中.c文件与.h文件 的使用-2020-12-27
  19. ccd和cmos的区别
  20. 淘宝搜索引擎的缓存机制

热门文章

  1. 什么是 ODBC – 开放式数据库连接
  2. 电子商务网站PPT选择服务器,第8章 电子商务系统规划与建设课件.ppt
  3. 借助excel工具进行多元线性回归模型的建立及案例分析
  4. SCSI代码分析(5)SCSI驱动编程模式
  5. RTL8187B无线网卡不能上网的解决办法
  6. MapGuide 安装
  7. H3CSE园区-SSH
  8. 《麦肯锡方法》学习笔记18
  9. 机器狗病毒样本 穿透冰和点还原卡
  10. 【转】汇编指令与机器码的相互转换