java 简单快速的生成二维码(带图片)
**使用java+zxing 简单快速的生成二维码。**
效果图:
首先需要引入两个jar文件:
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.8</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.0.0</version></dependency>
下面就是生成二维码的工具类:
public class CreatrQrCode{// logo默认边框颜色public static final Color DEFAULT_BORDERCOLOR = Color.WHITE;// logo默认边框宽度public static final int DEFAULT_BORDER = 1;// logo大小默认为照片的1/6public static final int DEFAULT_LOGOPART = 6;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 CreatrQrCode() {this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);}public demo02(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;}/*** 给二维码图片添加Logo** @param qrPic* @param logoPic*/public static void addLogo_QRCode(File qrPic, File logoPic, CreatrQrCode logoConfig) {try {if (!qrPic.isFile() || !logoPic.isFile()) {System.out.print("file not find !");System.exit(0);}/*** 读取二维码图片,并构建绘图对象*/BufferedImage image = ImageIO.read(qrPic);Graphics2D g = image.createGraphics();/*** 读取Logo图片*/BufferedImage logo = ImageIO.read(logoPic);int widthLogo = image.getWidth() / logoConfig.getLogoPart();// int heightLogo = image.getHeight()/logoConfig.getLogoPart();int heightLogo = image.getWidth() / logoConfig.getLogoPart(); //保持二维码是正方形的// 计算图片放置位置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, 10, 10);g.setStroke(new BasicStroke(logoConfig.getBorder()));g.setColor(logoConfig.getBorderColor());g.drawRect(x, y, widthLogo, heightLogo);g.dispose();ImageIO.write(image, "jpeg", new File("D:/ceshi/789.png"));} catch (Exception e) {e.printStackTrace();}}/*** @param pressText 文字* @param newImg 带文字的图片* @param targetImg 需要添加文字的图片* @param fontStyle* @param color* @param fontSize* @param width* @param height* @为图片添加文字*/public static void pressText(String pressText, String newImg, String targetImg, int fontStyle, Color color, int fontSize, int width, int height) {//计算文字开始的位置//x开始的位置:(图片宽度-字体大小*字的个数)/2int startX = (width - (fontSize * pressText.length())) / 2;//y开始的位置:图片高度-(图片高度-图片宽度)/2int startY = height - (height - width) / 2;try {
public class CreatrQrCode {// logo默认边框颜色public static final Color DEFAULT_BORDERCOLOR = Color.WHITE;// logo默认边框宽度public static final int DEFAULT_BORDER = 1;// logo大小默认为照片的1/6public static final int DEFAULT_LOGOPART = 6;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.* 在颜色{@ link #黑}和颜色上创建一个默认配置* {@link # WHITE},生成正常的黑白条码。*/public CreatrQrCode() {this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);}public CreatrQrCode(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;}/*** 给二维码图片添加Logo** @param qrPic* @param logoPic*/public static void addLogo_QRCode(File qrPic, File logoPic, CreatrQrCode creatrQrCode) {try {if (!qrPic.isFile() || !logoPic.isFile()) {System.out.print("file not find !");System.exit(0);}/*** 读取二维码图片,并构建绘图对象*/BufferedImage image = ImageIO.read(qrPic);Graphics2D g = image.createGraphics();/*** 读取Logo图片*/BufferedImage logo = ImageIO.read(logoPic);int widthLogo = image.getWidth() / creatrQrCode.getLogoPart();// int heightLogo = image.getHeight()/logoConfig.getLogoPart();int heightLogo = image.getWidth() / creatrQrCode.getLogoPart(); //保持二维码是正方形的// 计算图片放置位置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, 10, 10);g.setStroke(new BasicStroke(creatrQrCode.getBorder()));g.setColor(creatrQrCode.getBorderColor());g.drawRect(x, y, widthLogo, heightLogo);g.dispose();ImageIO.write(image, "jpeg", new File("D:/ceshi/789.png"));} catch (Exception e) {e.printStackTrace();}}/*** @param pressText 文字* @param newImg 带文字的图片* @param targetImg 需要添加文字的图片* @param fontStyle* @param color* @param fontSize* @param width* @param height* @为图片添加文字*/public static void pressText(String pressText, String newImg, String targetImg, int fontStyle, Color color, int fontSize, int width, int height) {//计算文字开始的位置//x开始的位置:(图片宽度-字体大小*字的个数)/2int startX = (width - (fontSize * pressText.length())) / 300;//y开始的位置:图片高度-(图片高度-图片宽度)/2int startY = height - (height - width) / 3;try {File file = new File(targetImg);Image src = ImageIO.read(file);int imageW = src.getWidth(null);int imageH = src.getHeight(null);BufferedImage image = new BufferedImage(imageW, imageH, BufferedImage.TYPE_INT_RGB);Graphics g = image.createGraphics();g.drawImage(src, 0, 0, imageW, imageH, null);g.setColor(color);g.setFont(new Font(null, fontStyle, fontSize));g.drawString(pressText, startX, startY);g.dispose();FileOutputStream out = new FileOutputStream(newImg);ImageIO.write(image, "JPEG", out);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image);out.close();System.out.println("image press success");} catch (Exception e) {System.out.println(e);}}}
在主函数中测试一下我们的的工具类有没有问题:
public static void main(String args[]) {try {//二维码表示的内容String content = "http://www.baidu.com";//存放logo的文件夹String path = "D:/ceshi/";MultiFormatWritermultiFormatWriter = new MultiFormatWriter();@SuppressWarnings("rawtypes")Map hints = new HashMap();//设置UTF-8, 防止中文乱码hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置二维码四周白色区域的大小hints.put(EncodeHintType.MARGIN,0);//设置二维码的容错性hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//width:图片完整的宽;height:图片完整的高//因为要在二维码下方附上文字,所以把图片设置为长方形(高大于宽)int width = 400;int height = 460;//画二维码,记得调用multiFormatWriter.encode()时最后要带上hints参数,不然上面设置无效BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);//qrcFile用来存放生成的二维码图片(无logo,无文字)File qrcFile = new File(path,"wutu.jpg");//logoFile准备放在二维码中的图片(path:图片路径,图片名称)File logoFile = new File(path,"shilinwei.jpg");//开始画二维码MatrixToImageWriter.writeToFile(bitMatrix, "jpg", qrcFile);//在二维码中加入图片CreatrQrCode creatrQrCode = new CreatrQrCode(); //LogoConfig中设置Logo的属性addLogo_QRCode(qrcFile, logoFile, creatrQrCode);int font = 20; //字体大小int fontStyle = 4; //字体风格//用来存放的带有logo+文字的二维码图片String newImageWithText = "D:/ceshi/456.jpg";//带有logo二维码图片String targetImage = "D:/ceshi/789.png";//附加在图片上的文字信息String text = "my name is Shi Linwei";//在二维码下方添加文字(文字居中)pressText(text, newImageWithText, targetImage, fontStyle, Color.red, font, width, height) ;} catch (Exception e) {e.printStackTrace();}}
我运行后的所有图片文件:
完事了,路过的大神请多多指点,谢谢
java 简单快速的生成二维码(带图片)相关推荐
- 前端vue uni-app基于uQRCode封装简单快速实用全端二维码生成插件
快速实现基于uQRCode封装简单快速实用全端二维码生成插件; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12677 效果图 ...
- 简单的二维码生成接口,自动生成二维码,返回图片地址
自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...
- [Java] Java生成二维码带LOGO, LOGO加圆角白框
先来看看效果: 实现: 生成指定文字内容的二维码 二维码中间嵌入LOGO 二维码做圆角和白色边框处理 新需求不断, 这不, 又来了个想生成带用户头像的需求. 蛮简单的- 在这里造完轮子分享给大家 因为 ...
- java实现后台直接生成二维码图片并直接上传到七牛云上面
java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...
- java在底图上生成二维码以及文字
java在底图上生成二维码以及文字 1.添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId> ...
- Java生成二维码带LOGO底部标题竖版字体
前言 Java后端生成二维码 底部 侧面带有标题,可调节字号 参考文章 使用Java生成二维码图片(亲测) Reborn_YY使用Java生成二维码图片 图标素材库 Java后台生成图片,前台实现图片 ...
- Java(Spring boot)实现生成二维码
文章目录 一.引入spring boot依赖: 二.工具类代码: 三.调用工具类生成二维码 1.将链接生成二维码图片并保存到指定路径 2.将链接生成二维码直接显示在页面 3.将以get请求传参链接生成 ...
- java 根据指定链接生成二维码
需求: 就是需要把一个报告网址链接生成二维码,然后渲染在报告中,扫描二维码的时候能访问到这个报告,效果就达到了 1.首先提前需要添加的maven依赖 <!-- https://mvnreposi ...
- JAVA使用ZPL命令生成二维码
1.将生成二维码的命令放在一个txt文件中 命令如下: ^XA^PMY #开启镜像 ^JMB #设置打印机每毫秒打印点数 ^FO250,175 #设置显示字母位置 ^CF0,60 #设置字体大小 ^F ...
最新文章
- CVPR 2021 Short-video Face Parsing Challenge 季军方案分享
- 营销增长大揭密丨市场人应具备的101种硬核营销姿势
- LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
- 不要666升级版(数位DP,三次方和)
- 当你辛辛苦苦写的博客文章被无情复制,成为了他的原创,你作何感想?
- 特性Attribute
- 为linux虚拟机添加硬盘分区,虚拟机centos添加硬盘和分区挂载
- 小米 OV 联合起来才不是为了对抗 Google!
- 楼主,不知道为什么这么流行
- linux —— ubuntu 初次安装问题
- PyS60 console中文乱码问题
- 文件快速定位神器(C++小项目实战)
- tilemap 菱形_Tilemap
- git推送不能完全退出错误
- 求水洼的问题——深度优先算法
- 计算机网络stp和utp,关于网络线UTP FTP STP SFTP 屏蔽层区别
- 魔兽世界---熊猫人之谜
- textarea在IE浏览器下只显示一行
- 阿里云服务器购买指南(适合新手小白的图文指导教程)
- 内联框架和音视频播放
热门文章
- 第一个项目: 票务管理系统
- 总裁演说思维应用:坚持用讲故事五步训练法,练好口才并不难!
- 彻底了解DVD:从入门到精通(一)[转]
- 数据库泰斗DeWitt:Shared-nothing架构落幕,Shared-storage架构归来
- wincc不正确的过程数据服务器,WinCC安装过程中的问题及其解决办法
- mysql查找连接的用户名和密码忘记_mysql忘记帐号密码 解决办法。
- 自下而上构建NFT社区
- 【大项目】-商城管理系统
- 手把手教你分析解决MySQL死锁问题
- CADTooLs v6.0 for Solidedge-ISO 1CD(欧磊零件库)