**使用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 简单快速的生成二维码(带图片)相关推荐

  1. 前端vue uni-app基于uQRCode封装简单快速实用全端二维码生成插件

    快速实现基于uQRCode封装简单快速实用全端二维码生成插件; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12677 效果图 ...

  2. 简单的二维码生成接口,自动生成二维码,返回图片地址

    自动生成二维码,返回图片地址 本来不想写的,但是怕太久不写这个东西,就要荒废了,就先记录一下简单的东西 这里因为,返回地址的时候,通过了nginx ,我试了很多方法都抓取不到对应的IP地址, 就在ng ...

  3. [Java] Java生成二维码带LOGO, LOGO加圆角白框

    先来看看效果: 实现: 生成指定文字内容的二维码 二维码中间嵌入LOGO 二维码做圆角和白色边框处理 新需求不断, 这不, 又来了个想生成带用户头像的需求. 蛮简单的- 在这里造完轮子分享给大家 因为 ...

  4. java实现后台直接生成二维码图片并直接上传到七牛云上面

    java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...

  5. java在底图上生成二维码以及文字

    java在底图上生成二维码以及文字 1.添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId> ...

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

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

  7. Java(Spring boot)实现生成二维码

    文章目录 一.引入spring boot依赖: 二.工具类代码: 三.调用工具类生成二维码 1.将链接生成二维码图片并保存到指定路径 2.将链接生成二维码直接显示在页面 3.将以get请求传参链接生成 ...

  8. java 根据指定链接生成二维码

    需求: 就是需要把一个报告网址链接生成二维码,然后渲染在报告中,扫描二维码的时候能访问到这个报告,效果就达到了 1.首先提前需要添加的maven依赖 <!-- https://mvnreposi ...

  9. JAVA使用ZPL命令生成二维码

    1.将生成二维码的命令放在一个txt文件中 命令如下: ^XA^PMY #开启镜像 ^JMB #设置打印机每毫秒打印点数 ^FO250,175 #设置显示字母位置 ^CF0,60 #设置字体大小 ^F ...

最新文章

  1. CVPR 2021 Short-video Face Parsing Challenge 季军方案分享
  2. 营销增长大揭密丨市场人应具备的101种硬核营销姿势
  3. LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
  4. 不要666升级版(数位DP,三次方和)
  5. 当你辛辛苦苦写的博客文章被无情复制,成为了他的原创,你作何感想?
  6. 特性Attribute
  7. 为linux虚拟机添加硬盘分区,虚拟机centos添加硬盘和分区挂载
  8. 小米 OV 联合起来才不是为了对抗 Google!
  9. 楼主,不知道为什么这么流行
  10. linux —— ubuntu 初次安装问题
  11. PyS60 console中文乱码问题
  12. 文件快速定位神器(C++小项目实战)
  13. tilemap 菱形_Tilemap
  14. git推送不能完全退出错误
  15. 求水洼的问题——深度优先算法
  16. 计算机网络stp和utp,关于网络线UTP FTP STP SFTP 屏蔽层区别
  17. 魔兽世界---熊猫人之谜
  18. textarea在IE浏览器下只显示一行
  19. 阿里云服务器购买指南(适合新手小白的图文指导教程)
  20. 内联框架和音视频播放

热门文章

  1. 第一个项目: 票务管理系统
  2. 总裁演说思维应用:坚持用讲故事五步训练法,练好口才并不难!
  3. 彻底了解DVD:从入门到精通(一)[转]
  4. 数据库泰斗DeWitt:Shared-nothing架构落幕,Shared-storage架构归来
  5. wincc不正确的过程数据服务器,WinCC安装过程中的问题及其解决办法
  6. mysql查找连接的用户名和密码忘记_mysql忘记帐号密码 解决办法。
  7. 自下而上构建NFT社区
  8. 【大项目】-商城管理系统
  9. 手把手教你分析解决MySQL死锁问题
  10. CADTooLs v6.0 for Solidedge-ISO 1CD(欧磊零件库)