java中使用zxing批量生成二维码立牌
发布时间 - 2026-01-10 21:50:10 点击率:次使用zxing批量在做好的立牌背景图的指定位置上,把指定的文本内容(链接地址、文本等)生成二维码并放在该位置,最后加上立牌编号。

步骤:
1).做好背景图,如下图:
2).生成二维码BufferedImage对象。代码如下:
/**
*
* @Title: toBufferedImage
* @Description: 把文本转化成二维码图片对象
* @param text
* 二维码内容
* @param width
* 二维码高度
* @param height
* 二位宽度
* @param
* @param Exception
* 设定文件
* @return BufferedImage 返回类型
* @throws
*/
public static BufferedImage toBufferedImage(String text, int width,
int height) throws Exception {
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 内容所使用字符集编码
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE, width, height, hints);
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, matrix.get(x, y) ? BLACK : WHITE);
}
}
return image;
}
3).在立牌背景图的指定位置上生成二维码,代码如下:
/**
*
* @Title: markImageByCode
* @Description: 向图片指定位置增加二维码
* @param img
* 二维码image对象
* @param srcImgPath
* 背景图
* @param targerPath
* 目标图
* @param positionWidth
* 位置横坐标
* @param positionHeight
* 位置纵坐标
* @return void 返回类型
* @throws
*/
public static void markImageByCode(Image img, String srcImgPath,
String targerPath, int positionWidth, int positionHeight) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 1、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 2、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 3、二维码位置
g.drawImage(img, positionWidth, positionHeight, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 4、释放资源
g.dispose();
// 5、生成图片(建议生成PNG的,jpg会失真)
os = new FileOutputStream(targerPath);
ImageIO.write(buffImg, "PNG", os);
System.out.println("二维码图片生成成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4).在立牌上加上立牌编号
/**
*
* @Title: pressText
* @Description:向图片指定位置加上文字
* @param pressText
* 文字内容
* @param srcImageFile
* 原图片
* @param destImageFile
* 目标图片
* @param x
* 横坐标
* @param y
* 纵坐标
* @param alpha
* 透明度
* @return void 返回类型
* @throws
*/
public final static void pressText(String pressText, String srcImageFile,
String destImageFile, int x, int y, float alpha) {
try {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
// 开文字抗锯齿 去文字毛刺
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.drawImage(src, 0, 0, width, height, null);
// 设置颜色
g.setColor(new Color(89, 87, 87));
// 设置 Font
g.setFont(new Font("方正兰亭中黑_GBK", Font.BOLD, 14));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) .
g.drawString(pressText, x, y);
g.dispose();
ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));// 输出到文件流
} catch (Exception e) {
e.printStackTrace();
}
}
示例:
代码:
测试代码
public class codeTest {
public static void main(String[] args) throws Exception {
String text = "http://www.xxx.com/"; // 二维码内容
// 生成二维码
//生成图片二维码存放目录
String targetPath = "f:/qrcode/targetimg/" + Utils.toStr();
//创建目录
Utils.makeDirs(targetPath);
int begin = 100;//code 开始数字
int end = 101;//code结束数字
for (int i = begin; i <= end; i++) {
//生成含日期的16位数字如20161214000001
String code = Utils.toStr() + Utils.formateNumber(i);
//获取二维码对象
BufferedImage image = Utils.toBufferedImage(text
+ "?payCode=" + code,240,240);
//生成含背景图+二维码的立牌的图
Utils.markImageByCode(image, "f:/qrcode/srcimg/src.png",
targetPath + "/" + code + ".png", 340, 160);
//立牌的图加上code编号
Utils.pressText(code, targetPath + "/" + code + ".png", targetPath
+ "/" + code + ".png", 390, 417, 0.5f);
}
// 生成二维码
}
}
效果:
批量生成的图片效果图如下
批量图:
utils代码:
package cn.utils.code;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
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.common.BitMatrix;
/** 工具类. */
public abstract class Utils {
/** 日期格式:yyyy-MM-dd HH:mm:ss */
public static String DF_DATETIME = "yyyyMMdd";
private static float alpha = 1f;
/**
*
* @Title: toBufferedImage
* @Description: 把文本转化成二维码图片对象
* @param text
* 二维码内容
* @param width
* 二维码高度
* @param height
* 二位宽度
* @param
* @param Exception
* 设定文件
* @return BufferedImage 返回类型
* @throws
*/
public static BufferedImage toBufferedImage(String text, int width,
int height) throws Exception {
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 内容所使用字符集编码
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE, width, height, hints);
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, matrix.get(x, y) ? BLACK : WHITE);
}
}
return image;
}
/**
*
* @Title: markImageByCode
* @Description: 向图片指定位置增加二维码
* @param img
* 二维码image对象
* @param srcImgPath
* 背景图
* @param targerPath
* 目标图
* @param positionWidth
* 位置横坐标
* @param positionHeight
* 位置纵坐标
* @return void 返回类型
* @throws
*/
public static void markImageByCode(Image img, String srcImgPath,
String targerPath, int positionWidth, int positionHeight) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 1、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 2、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 3、二维码位置
g.drawImage(img, positionWidth, positionHeight, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 4、释放资源
g.dispose();
// 5、生成图片(建议生成PNG的,jpg会失真)
os = new FileOutputStream(targerPath);
ImageIO.write(buffImg, "PNG", os);
System.out.println("二维码图片生成成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
* @Title: pressText
* @Description:向图片指定位置加上文字
* @param pressText
* 文字内容
* @param srcImageFile
* 原图片
* @param destImageFile
* 目标图片
* @param x
* 横坐标
* @param y
* 纵坐标
* @param alpha
* 透明度
* @return void 返回类型
* @throws
*/
public final static void pressText(String pressText, String srcImageFile,
String destImageFile, int x, int y, float alpha) {
try {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
// 开文字抗锯齿 去文字毛刺
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.drawImage(src, 0, 0, width, height, null);
// 设置颜色
g.setColor(new Color(89, 87, 87));
// 设置 Font
g.setFont(new Font("方正兰亭中黑_GBK", Font.BOLD, 14));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y) .
g.drawString(pressText, x, y);
g.dispose();
ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));// 输出到文件流
} catch (Exception e) {
e.printStackTrace();
}
}
// 日期转字符串
/** 将日期格式化为String,默认格式为yyyy-MM-dd HH:mm:ss,默认日期为当前日期. */
public static String toStr() {
return toStr(DF_DATETIME);
}
/** 将日期格式化为String,格式由参数format指定,默认日期为当前日期,format值可使用本类常量或自定义. */
public static String toStr(String format) {
return toStr(format, new Date());
}
/** 将日期格式化为String,默认格式为yyyy-MM-dd HH:mm:ss,日期由参数date指定. */
public static String toStr(Date date) {
return toStr(DF_DATETIME, date);
}
/** 将日期格式化为String,格式由参数format指定,日期由参数date指定,format值可使用本类常量或自定义. */
public static String toStr(String format, Date date) {
return new SimpleDateFormat(format).format(date);
}
public static String formateNumber(int num) {
DecimalFormat df = new DecimalFormat("000000");
String str2 = df.format(num);
return str2;
}
public static boolean makeDirs(String filePath) {
File folder = new File(filePath);
return (folder.exists() && folder.isDirectory()) ? true : folder
.mkdirs();
}
}
使用的技术:
1.使用的zxing生成二维码工具。
1)下载地址:http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/
2).maven配置
<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>2.2</version> </dependency>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# zxing生成二维码
# java批量生成二维码
# Java利用Zxing生成二维码的简单实例
# java ZXing生成二维码及条码实例分享
# java中ZXing 生成、解析二维码图片的小示例
# Java中基于maven实现zxing二维码功能
# Java使用Google Zxing生成二维码的例子
# 基于google zxing的Java二维码生成与解码
# Java基于zxing生成二维码矩阵过程解析
# java zxing合成复杂二维码图片示例详解
# Java使用Zxing二维码生成的简单示例
# Java基于Google zxing生成带logo的二维码图片
# 本类
# 自定义
# 二位
# 转化成
# 格式为
# 边缘
# 亭中
# 放在
# 抗锯齿
# 下载地址
# 大家多多
# 如下图
# createGraphics
# positionWidth
# Graphics2D
# setRenderingHint
# getHeight
# srcImgPath
# KEY_INTERPOLATION
# targerPath
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
实例解析angularjs的filter过滤器
中国移动官方网站首页入口 中国移动官网网页登录
如何登录建站主机?访问步骤全解析
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
如何快速生成专业多端适配建站电话?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
如何在Tomcat中配置并部署网站项目?
如何批量查询域名的建站时间记录?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何在建站宝盒中设置产品搜索功能?
香港服务器租用费用高吗?如何避免常见误区?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何制作一个表白网站视频,关于勇敢表白的小标题?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
html如何与html链接_实现多个HTML页面互相链接【互相】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
魔毅自助建站系统:模板定制与SEO优化一键生成指南
详解vue.js组件化开发实践
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Android仿QQ列表左滑删除操作
如何在阿里云高效完成企业建站全流程?
简单实现Android文件上传
成都网站制作公司哪家好,四川省职工服务网是做什么用?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
高端建站三要素:定制模板、企业官网与响应式设计优化
高端建站如何打造兼具美学与转化的品牌官网?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何处理表单验证?(Requests代码示例)
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
活动邀请函制作网站有哪些,活动邀请函文案?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
使用C语言编写圣诞表白程序
高防服务器租用如何选择配置与防御等级?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何用AI帮你把自己的生活经历写成一个有趣的故事?
详解jQuery中基本的动画方法
如何快速打造个性化非模板自助建站?

