一个简单的javaweb项目

注释比较多直接上代码 附上使用的jar包Qrcode

package com.fehorizon.erp.pda.utils;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;import com.fehorizon.erp.pda.base.BaseService;
import com.swetake.util.Qrcode;
/***  二维码创建* @author yhzm**/
public class printServiceImpl extends BaseService {public void barCodeGenera() {init(false);//先创建一个二维码String text = strRequiredParam("barcode","二维码信息");String desc = strRequiredParam("desc","文字内容");//二维码下面的文字描述 String logoPath = "d:\\aa.png";//二维码的logo地址int logoWidth = 40; //logo的宽int logoHeight = 40;  //logo的高try{Qrcode qrcode = new Qrcode();qrcode.setQrcodeErrorCorrect('M');//设置纠错等级(分为:L、M、H三个等级)qrcode.setQrcodeEncodeMode('B');//N代表数字、A代表a-Z、B代表其他字符qrcode.setQrcodeVersion(7);//设置版本int width = 67+12*(7-1);//设置二维码的宽  二维码像素的大小和版本号有关  但是版本号越大   二维码也越是复杂  这个需要注意int height = 67+12*(7-1);//设置二维码的高//将内容变为特定UTF-8格式编码的字节码byte [] qrData = text.getBytes("UTF-8");BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);//创造画笔Graphics2D gs = bufferedImage.createGraphics();gs.setBackground(Color.WHITE);//设置背景gs.setColor(Color.BLACK);//设置画笔颜色gs.clearRect(0, 0, width, height);//清除画板内容//设置偏移量int pixoff = 2;boolean [][] d = qrcode.calQrcode(qrData);for(int y=0;y<d.length;y++) {for(int x=0;x<d.length;x++) {if(d[x][y]) {gs.fillRect(x*3+pixoff, y*3+pixoff, 3, 3);}}}gs.dispose();BufferedImage bm = bufferedImage;//二维码  File logoFile = new File(logoPath); //logo图片   BufferedImage logoImg = ImageIO.read(logoFile);  /* float ratio = 0.5;   //倒圆角if(ratio>0){  logoWidth = logoWidth>width*ratio ? (int)(width*ratio) : logoWidth;  logoHeight = logoHeight>height*ratio ? (int)(height*ratio) : logoHeight;  }  */int x = (width-logoWidth)/2;  int y = (height-logoHeight)/2;  Graphics g = bm.getGraphics();  g.drawImage(logoImg, x, y, logoWidth, logoHeight, null);  int whiteWidth = 0;  //白边Font font = new Font("黑体", Font.BOLD, 12);  int fontHeight = g.getFontMetrics(font).getHeight();//得到字体的高度  //计算需要多少行  int lineNum = 1;  int currentLineLen = 0;  for(int i=0;i<desc.length();i++){  char c = desc.charAt(i);  int charWidth = g.getFontMetrics(font).charWidth(c); //循环文字得到文字区域的行数if(currentLineLen+charWidth>width){  lineNum++;  currentLineLen = 0;  continue;  }  currentLineLen += charWidth;  }  int totalFontHeight = fontHeight*lineNum; //得到文字区域的高度 int wordTopMargin = 4;  BufferedImage bm1 = new BufferedImage(width, height+totalFontHeight+wordTopMargin-whiteWidth, BufferedImage.TYPE_INT_RGB); //创建将文字高度计算到其中的图片 Graphics g1 = bm1.getGraphics();   g1.setColor(Color.WHITE);  g1.fillRect(0, height, width, totalFontHeight+wordTopMargin-whiteWidth); //将文字部分的背景填充成白色 g1.setColor(Color.black);  g1.setFont(font);  g1.drawImage(bm, 0, 0, null); //将创建好的二维码从起点(0,0)开始画在图中 int currentLineIndex = 0;  //判断是否只有一行,只有一行就居中显示currentLineLen = lineNum-1==currentLineIndex?(width-g.getFontMetrics(font).stringWidth(desc))/2:0;int baseLo = g1.getFontMetrics().getAscent();  for(int i=0;i<desc.length();i++){  String c = desc.substring(i, i+1);  int charWidth = g.getFontMetrics(font).stringWidth(c); //判断是否需要换行if(currentLineLen+charWidth>width){  currentLineIndex++;  //判断是否是最后一行  最后一行居中显示currentLineLen = lineNum-1==currentLineIndex?(width-g.getFontMetrics(font).stringWidth(desc.substring(i)))/2:0;g1.drawString(c, currentLineLen + whiteWidth, height+baseLo+fontHeight*(currentLineIndex)+wordTopMargin);//将单个文字画到对应位置 currentLineLen = charWidth;  continue;  }  g1.drawString(c, currentLineLen+whiteWidth, height+baseLo+fontHeight*(currentLineIndex) + wordTopMargin);  currentLineLen += charWidth;  } g1.dispose();  bm = bm1;response.setContentType("image/jpeg");//好了 ,现在通过IO流来传送数据ImageIO.write(bm , "JPEG", response.getOutputStream());}catch(Throwable e){  e.printStackTrace();  }  }
}

java 通过Qrcode生成二维码添加图片logo和文字描述相关推荐

  1. qrcode 生成二维码,带logo 带文字描述

    qrcode 生成二维码 1.引入 pom.xml 2. ResourceRenderer 3. QRCodeUtil 4. QRCodeController 5. HTML 6. 测试 1.引入 p ...

  2. java 生成二维码可带LOGO和文字描述

    maven依赖 <properties><zxing.version>3.3.0</zxing.version><commons-lang-version&g ...

  3. Java使用QRcode生成二维码

    1.添加依赖 <!--google生成二维码依赖--> <dependency><groupId>com.google.zxing</groupId>& ...

  4. Java利用Qrcode生成二维码

    1.jar包下载http://ishare.iask.sina.com.cn/download/explain.php?fileid=35428376 package ewm; import java ...

  5. java通过QR生成二维码 (QRCodeUtils工具类)(HUTOOL生成二维码)

    1.简述 二维码生成关键是QR,QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化 详情简介请看 2.工具类 package com.lingxu.bas ...

  6. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  7. Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小、字体大小、字体颜色、边框颜色、边框大小等等

    Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小.字体大小.字体颜色.边框颜色.边框大小等等. 0.准备 ...

  8. java使用zxing生成二维码,可带logo和底部文字

    java使用zxing生成二维码,可带logo和底部文字 springboot中整合zxing生成二维码 一.导入依赖 <properties><zxing.version>3 ...

  9. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

最新文章

  1. 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法
  2. 【转】OGRE资源相关分析
  3. thinkphp mysql函数_php封装的数据库函数与用法示例【参考thinkPHP】
  4. vue手机端回退_华为官方教程:以 P40 为例,鸿蒙 OS 2.0 Beta 版本回退到 EMUI 11 稳定版...
  5. 【自动化__持续集成】___java___static
  6. centos7花里胡哨之终端美化
  7. Java 中的位移运算符
  8. 简述mysql 存储引擎_Mysql基础-存储引擎简述
  9. 自定义异常禁用异常堆栈_如何在Mac上禁用或自定义自动更正
  10. TFS2010映射工作区问题 路径 XXX 已在工作区 XXX;XXX 中映射
  11. java的四种修饰符访问权限
  12. 学计算机用16g内存,说出去就是个笑话,两万多电脑内存才16G,我认为这配置不合理!...
  13. 【高数】幂级数求和函数问题:用变限积分?积分下限是0?S(0)怎么求?求和时起始项n和角标有规定吗?
  14. Linux查看jdk版本、卸载jdk
  15. 安卓版文件转换器如何使用?
  16. java仿制百度云盘_基于jsp的仿百度网盘-JavaEE实现仿百度网盘 - java项目源码
  17. 强化学习入门笔记 | UCL silver RL | UC Berkely cs285 DRL
  18. cassandra install troubleshooting
  19. scale实现页面缩放自适应
  20. 如何连接到GBase的XDM服务器

热门文章

  1. 我的勇者服务器维护3月5日,《我的勇者》高能国漫联动开启!
  2. Support for password authentication was removed on August 13, 2021.解决方案和Git多源多帐号高效追踪实现
  3. Infortrend CS分布式NAS集群强项之---成本篇
  4. matlab复函数画图
  5. 神经网络优化算法详解
  6. gearman 入门使用笔记
  7. win7文件权限设置
  8. 深度学习笔记(28) 残差网络
  9. 大学计算机比赛保送,他是信息奥赛金牌得主,保送清华姚班!初中打游戏经常被老师抓...
  10. 清华大学计算机系保送,2018清华大学保送生拟录取名单公布