1、添加依赖

 <!--Java 生成二维码 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency>

2、添加二维码生成工具类

package com.fv.pim.api.utils;import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import sun.font.FontDesignMetrics;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;public class QRCodeUtil {/*** 创建二维码* @param charSet 编码方式* @param content 二维码内容* @param qrWidth 二维码长度* @param qrHeight 二维码高度* @return*/public static BufferedImage createImage(String charSet, String content, int qrWidth, int qrHeight){Hashtable hints = new Hashtable();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);hints.put(EncodeHintType.CHARACTER_SET, charSet);hints.put( EncodeHintType.MARGIN, 1);BitMatrix bitMatrix = null;try {bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE,qrWidth , qrHeight, // 修改二维码底部高度hints);} catch (WriterException e) {e.printStackTrace();}int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();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, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);}}return image;}/*** 对已经生成好的二维码设置logo* @param source 二维码* @param logo logo图片* @param logoWidth logo宽度* @param logoHeight logo高度*/public static void insertLogoImage(BufferedImage source,Image logo,int logoWidth,int logoHeight){Graphics2D graph = source.createGraphics();int qrWidth = source.getWidth();int qrHeight = source.getHeight();int x = (qrWidth - logoWidth) / 2;int y = (qrHeight - logoHeight) / 2;graph.drawImage(logo, x, y, logoWidth, logoHeight, null);Shape shape = new RoundRectangle2D.Float(x, y, logoWidth, logoHeight, 6, 6);graph.setStroke(new BasicStroke(3f));graph.draw(shape);graph.dispose();}/*** 缩小logo图片* @param logoPath* @param logoWidth* @param logoHeight* @return*/public static Image compressLogo(String logoPath, int logoWidth, int logoHeight){File file = new File(logoPath);if (!file.exists()) {System.err.println("" + logoPath + "   该文件不存在!");return null;}Image original = null;try {original = ImageIO.read(new File(logoPath));} catch (IOException e) {e.printStackTrace();}int width = original.getWidth(null);int height = original.getHeight(null);if (width > logoWidth) {width = logoWidth;}if (height > logoHeight) {height = logoHeight;}Image image = original.getScaledInstance(width, height, Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩小后的图g.dispose();return image;}/*** 增加底部的说明文字* @param source 二维码* @param text 说明内容* @param step*/public static BufferedImage addBottomFont(BufferedImage source, String text,int step) {int qrWidth = source.getWidth();System.out.println("二维码的宽度"+qrWidth);int qrHeight = source.getHeight();System.out.println("二维码的高度"+qrHeight);BufferedImage textImage = textToImage(text, qrWidth, 20,16);Graphics2D graph = source.createGraphics();//开启文字抗锯齿graph.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);int width = textImage.getWidth(null);int height = textImage.getHeight(null);Image src = textImage;graph.drawImage(src, 0, qrHeight - (20 * step) - 10, width, height, null);graph.dispose();return  source;}/*** 将文明说明增加到二维码上* @param str       文字* @param width     宽* @param height    高* @param fontSize 字体大小* @return*/public static BufferedImage textToImage(String str, int width, int height,int fontSize) {BufferedImage textImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D)textImage.getGraphics();//开启文字抗锯齿g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);g2.setBackground(Color.WHITE);g2.clearRect(0, 0, width, height);g2.setPaint(Color.BLACK);FontRenderContext context = g2.getFontRenderContext();Font font = new Font("微软雅黑", Font.PLAIN, fontSize);g2.setFont(font);LineMetrics lineMetrics = font.getLineMetrics(str, context);FontMetrics fontMetrics = FontDesignMetrics.getMetrics(font);float offset = (width - fontMetrics.stringWidth(str)) / 2;float y = (height + lineMetrics.getAscent() - lineMetrics.getDescent() - lineMetrics.getLeading()) / 2;g2.drawString(str, (int)offset, (int)y);return textImage;}/*** 顶部增加说明文字* @param source* @param text*/public static void addUpFont(BufferedImage source, String text) {int qrWidth = source.getWidth();int qrHeight = source.getHeight();BufferedImage textImage = textToImage(text, qrWidth, 10,10);Graphics2D graph = source.createGraphics();//开启文字抗锯齿graph.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);int width = textImage.getWidth(null);int height = textImage.getHeight(null);Image src = textImage;graph.drawImage(src, 0, 4, width, height, null);graph.dispose();}/*** 生成二维码图片* @param charSet 二维码编码方式* @param content 内容* @param qrWidth 宽度* @param qrHeight 长度* @param formatName jpg等图片格式* @param imgPath 二维码存放路径*/public static void encode(String charSet,String content,int qrWidth,int qrHeight,String formatName,String imgPath){BufferedImage image = QRCodeUtil.createImage(charSet,content,qrWidth,qrHeight);try {ImageIO.write(image, formatName, new File(imgPath));} catch (IOException e) {e.printStackTrace();}}/*** 生成二维码图片流* @param charSet 二维码编码方式* @param content 内容* @param qrWidth 宽度* @param qrHeight 长度* @return*/public static BufferedImage encode(String charSet,String content,int qrWidth,int qrHeight) {BufferedImage image = QRCodeUtil.createImage(charSet,content,qrWidth,qrHeight);return image;}public static void encode( BufferedImage image,String formatName,String imgPath){try {ImageIO.write(image, formatName, new File(imgPath));} catch (IOException e) {e.printStackTrace();}}public static void mkdirs(String destPath) {File file = new File(destPath);// 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)if (!file.exists() && !file.isDirectory()) {file.mkdirs();}}/** 解析二维码*/public static String decode(File file, String cherSet) throws Exception {BufferedImage image;image = ImageIO.read(file);if (image == null) {return null;}BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));Result result;Hashtable hints = new Hashtable();hints.put(DecodeHintType.CHARACTER_SET, cherSet);result = new MultiFormatReader().decode(bitmap, hints);String resultStr = result.getText();return resultStr;}
}

3、测试

    @PostMapping("/getQRCode")public AjaxResult getWebQR(@RequestBody QrEntity qrEntity) {AjaxResult ajax = AjaxResult.success();String url = "www.baidu.com"BufferedImage image = QRCodeUtil.createImage("utf-8", url, 300, 300);QRCodeUtil.addUpFont(image, "企业信息填写");String imagePath = null;String path = null;try {File file = new File("D://保存到本地的路径");if (!file.isDirectory()) {file.mkdirs();}ImageIO.write(image, "JPEG", file);} catch (IOException e) {e.printStackTrace();}ajax.put("msg","获取二维码成功");ajax.put("imagePath",path);return ajax;}

Java url链接生成二维码相关推荐

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

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

  2. 使用IDEA创建一个通过url链接生成二维码的java程序|自动生成二维码

    平时使用了那么多的二维码,今天我们自己做一个二维码.今天刚安装了IDEA,学会了用法,就来通过IDEA做一个生成二维码的程序. 首先新建一个项目 设置项目名称 点击Next之后,出现下图所示页面:   ...

  3. Java指定链接生成二维码的华丽转身

    所需要的jar包 core-3.1.0.jar 工具类QrCodeUtil.java package erweima;import java.awt.image.BufferedImage; impo ...

  4. 前端页面直接根据URL链接生成二维码【亲测可用】

    1安装qrcodejs2 npm install qrcodejs2 -save 实操:Terminal下执行 2在所需要的前端页面中引入[找到qrcode.js直接拉到页面中] 或者 import ...

  5. JAVA实现链接生成二维码

    第一步:添加以下maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>c ...

  6. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。

    推荐一款适用所有Javascript运行环境的二维码生成组件. uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js应用 ...

  7. Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接

    Python 二维码的读取与生成演示 ① 使用链接生成二维码 ② 读取二维码里的链接 [ 文章推荐 ] Python 绘制中国地图:使用 pyecharts 最新版本绘制中国地图实例详解,个性化地图定 ...

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

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

  9. 使用Java、Servlet 生成二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

  10. java根据内容生成二维码

    java根据内容生成二维码 一.首先导入jar包:google.zxing.jar jar包可以从maven网站下载:meven仓库 这里可以找到你想要的绝大多数jar包,可以是依赖,也可以是jar包 ...

最新文章

  1. Hibernate 中配置属性详解(hibernate.properties)
  2. 老板,请给我多点培养【写给老板的一封信】
  3. 无法监控端口_如何使用snmp监控linux服务器
  4. [SCOI2003]字符串折叠
  5. 李洪强iOS开发之OC[012] -类的声明实现小结
  6. 设计模式解密(9)- 装饰者模式
  7. python中定制类
  8. CSS3 column属性族firefox浏览器下的问题
  9. servlet执行流程代码分析
  10. 6.Linux 运行级别
  11. Cocos2d-x 3.0 开发(四)使用CocoStudio创建UI并载入到程序中
  12. WD西部数据移动硬盘官方真伪查询
  13. python pip卸载不了库,比如使用pyinstaller时greenlet报错但卸载不了
  14. 如何传递NoteExpress的参考文献(包括题录和附件)给他人?
  15. 笔记:美团智能配送系统的运筹优化实战
  16. PEST分析顺丰服务需求_快递行业宏观环境PEST分析
  17. 使用Numpy和Opencv完成基本图像的数据分析(Part I)
  18. 分享一款市面比较好用的收款工具, SHOUK8 个人微信支付宝收款工具 微信支付宝财付通免签约收款即时到帐辅助
  19. 解决误删Android系统的tmp目录
  20. Unable to start program bug解决方法

热门文章

  1. hibernate hbb.xml 映射关系
  2. 微信第三方平台代小程序实现业务
  3. 计算机英语单词怎么读,英语单词read怎么读,read的音标是什么,read是什么意思 - 音标网...
  4. 织梦dedeCMS留言薄
  5. closest() 方法
  6. DCM protocol Diagnostic session
  7. LabVIEW控制Arduino驱动1602液晶显示屏(基础篇—10)
  8. 很好用的搜网盘资源工具。很多都能找到
  9. MCS:离散随机变量——Binomial分布
  10. 利用qiime2分析微生物组16S rRNA数据小结