Java将文件转换成二维码

2023-11-08

生成二维码主要代码为在步骤1、2中,下边后续步骤3、4、5涉及到具体的业务。要是用该工具类时需要拷贝前两个步骤代码即可。

1、在项目pom.xml文件中引入生成二维码的第三方依赖

<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>

2、生成二维码的工具类

/**
 * 二维码生成工具
 */
public class QRCodeUtils {

    private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;

    /**
     * 根据字符串生成对应的二维码图片png
     * 大小:300*300
     * <p>
     * content:要转换的文字内容
     * path:生成的二维码图片的绝对路径
     * filename: 生成后的二维码图片的文件名
     * Constants.SYS_HOME_QRCODE_FORMAT=“PNG”。我在外部常量类中定义的一个常量,即生成的二维码图片的格式
     */
    public static void buildQuickMark(String content, String path, String filename) {
        try {
            BitMatrix byteMatrix = new MultiFormatWriter().encode(new String(content.getBytes(), "iso-8859-1"),
                    BarcodeFormat.QR_CODE, 300, 300);
            String format = Constants.SYS_HOME_QRCODE_FORMAT;
            File file = new File(path + "\\" + filename + "." + format);
            BufferedImage image = toBufferedImage(byteMatrix);
            if (!ImageIO.write(image, format, file)) {
                throw new IOException("Could not write an image of format " + format + " to " + file);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置二维码格式
     *
     * @param matrix
     * @return
     */
    private static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.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, matrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }
}


//测试将http://127.0.0.1:8888链接生成二维码
public static void main(String[] args) {
    //设置图片内容
    String content = "http://127.0.0.1:8888";
    //设置图片存放位置
    String path = "D:\\QRCode";
    //设置生成的图片的名字
    String filename = "test";
    QRCodeUtils.buildQuickMark(content, path, filename);
    System.out.println("创建成功");
}

3、生成的二维码图片

在这里插入图片描述

4、生成二维码的业务层代码实现类

/**
 * 二维码 业务层处理
 *
 * @author sense
 */
@Service
public class SysQRCodeServiceImpl implements SysQRCodeService {

    @Autowired
    SysConfigService sysConfigService;

    public String getQRCode() {
        return saveQRCode();
    }

    //将生成的二维码保存到服务器,并返回文件名
    public String saveQRCode(){
        //首先拿到系统配置中的要转换的二维码的值
        String configValue = sysConfigService.selectConfigByKey(Constants.SYS_HOME_QRCODE).getConfigValue();
        String qrCodeName = "QRCode";
        //生成二维码图片
        QRCodeUtils.buildQuickMark(configValue,uploadUrl(), qrCodeName);
        String resultQRCodeName = qrCodeName+"."+Constants.SYS_HOME_QRCODE_FORMAT;
        return resultQRCodeName;
    }


    //设置生成的二维码存放路径
    public String uploadUrl() {
        // 根据系统当前日期
        Date now = new Date();
        String date = new SimpleDateFormat("yyyyMM").format(now);
        // 设置图片存放地址
        String uploadFilePath = SenseConfig.getUploadFilePath();
        // 判断是否存在地址,如果不存在,按照规则创建文件夹
        File addr = new File(uploadFilePath);
        if (!addr.exists()) {
            addr.mkdirs();
        }
        return uploadFilePath;
    }

5、生成二维码的业务层代码接口

public interface SysQRCodeService {
    String getQRCode();
}

6、生成二维码的接口,共前端调用,获取生成二维码的图片名

/**
 * QRCode 生成二维码
 */
@RestController
@RequestMapping("/sys/QRCode")
public class SysQRCodeController {

    @Autowired
    SysQRCodeService sysQRCodeService;

    @RequestMapping()
    public AjaxResult getQRCode(){
        return AjaxResult.success(sysQRCodeService.getQRCode());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java将文件转换成二维码 的相关文章

  • socks协议解析

    SOCKS5 协议解析 一 定义 SOCKS5 是一个代理协议 旨在为位于 Intranet 防火墙后的用户提供访问 Internet 的代理服务 有些博文说Socks协议位于7层协议的传输层 有些博文说位于会话层 我个人的理解是位于会话层
  • 【JavaScript】数组去重

    数组去重 1 Set console log Array from new Set arr console log new Set arr 2 indexOf function unique var newArr for var i 0 i

随机推荐

  • Pytest 自定义HOOK函数

    除了系统提过的HOOK函数外 也可以通过自定义HOOK的方式实现想要的功能 首先创建一个py文件 里面定义自己的HOOK函数 主要pytest里面的hook函数必须以pytest开头 myhook py def pytest myhook
  • 三. Zuul 网关服务基础解释及基础搭建测试

    目录 一 基础 Zuul 与 Gateway 区别 二 Zuul1 网关 三 Zuul 核心过滤器 pre过滤器 route过滤器 post过滤器 四 搭建 Zuul 网关服务 通过 Zuul 间接访问微服务接口 1 步骤 2 创建目标服务
  • 女性架构师优先?驾驭概念的技能是最高潜力

    51CTO独家特稿 在近日51CTO开发频道对数位架构师进行采访的时候 编辑观察到一个很有意思的现象 那就是他们在提起一个假想架构师的时候会下意识的使用 she 或者 她 来指代 然而我们这次采访到的的架构师们却全都是男士 这似乎是一个比较
  • 1254 统计封闭岛屿的数目(dfs)

    1 问题描述 有一个二维矩阵 grid 每个位置要么是陆地 记号为 0 要么是水域 记号为 1 我们从一块陆地出发 每次可以往上下左右 4 个方向相邻区域走 能走到的所有陆地区域 我们将其称为一座 岛屿 如果一座岛屿 完全 由水域包围 即陆
  • AJAX异步请求&JSON数据格式

    目录 前言 1 AJAX的实现方式 1 1原生的js实现方式 1 2JQuery实现方式 2 1语法 3 JSON数据和Java对象的相互转换 3 1将JSON转换为Java对象 3 2将Java对象转换为JSON 前言 AJAX ASyn
  • 重启虚拟机后dhclient进程未运行解决办法

    https www cnblogs com jiawei2527 p 10778938 html 问题分析 重启虚拟机后 dhclient进程未运行的根因通常为 1 NetworkManager未开启自启动导致的dhclient进程未运行
  • 计算机组成原理--基于Logisim的奇偶校验电路实验的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的奇偶校验电路实验 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logi
  • 实现整数堆栈算法的Java程序

    实现整数堆栈算法的Java程序 堆栈 Stack 是一种常用的数据结构 它遵循先进后出 Last In First Out LIFO 的原则 在Java中 我们可以使用整数堆栈算法来实现一个基本的堆栈数据结构 本文将演示如何使用Java编写
  • vue 图片下载到本地,图片保存到本地

    必须同源 访问的网站域名与服务器域名一致 才能下载 downs var alink document createElement a alink href this shop shoppic url alink download pic 图
  • 没有libelf.h libdw.h

    执行如下安装 apt get install libdw dev
  • editview只输入英文_android使用正则表达式控制EditText只能输入数字和英文

    在方法中加载 edt addTextChangedListener new SearchWather edt 新建类 SearchWather java import java util regex Matcher import java
  • 企业微信获取用户信息响应40029(微信小程序与公众号出现类似问题应该是同样的原因)

    企业微信获取用户信息响应40029 在对接企业微信的时候需要通过code去获取userId 但是会返回40029的error码 经过测试与验证原因是访问地址 https open weixin qq com connect oauth2 a
  • 【Vue学习笔记】export ‘default‘ (imported as ‘Vue‘) was not found in ‘vue‘问题解决

    export default imported as Vue was not found in vue 安装了5 几的vuecli src plugins element js里用到了 import Vue from vue npm run
  • 绝无仅有的SpringBoot+Vue前后端分离项目《盈利宝》

    每天都在制造矛盾并解决矛盾的路上 程序员的主要矛盾 不是书和资料多不多的矛盾 而是学着学着发现知识又更新了 时间就像一台永不停歇的永动机 向前不停地运作 年初的flag渐行渐远 管他前浪 还是后浪 能浪的浪 才是好浪 今天带你解锁 Spri
  • gitlab操作

    1 配置ssh 点击访问 2 创建新分支与切换新分支 git branch 新分支名 创建 git checkout 新分支名 切换到新分支 3 查看当前分支 git branch 所指的就是当前所在分支 4 本地删除文件后与远程git同步
  • JConsole&VisualVM监控总结

    简介 JConsole 以下写作jconsole VisualVM 以下写作jvisualvm 都是比较好的JVM调优工具 且都为JDK自带 可在命令行直接启动 监控示例 Server端 需要监控的主机 配置 设置临时JAVA参数 expo
  • 管理用户账号

    目录 Windows平台用户账号介绍 管理本地用户账号 用户配置文件 演示配置漫游用户配置文件 强制漫游配置说明 管理本地组 组的操作 案例分析 Windows平台用户账号介绍 在Windows系统中 每当用户需要登录到系统时就需要对用户进
  • 复杂grid 支持多表头,固定表头,冻结列,合并行

    该组件支持三种渲染形态 因为有些简单的表格没必要去做太复杂的处理 支持自适应页面宽度和可以设置固定宽度 理论上是所有浏览器都支持 但是因为我引用了一些工具类 处理数组的filter map 所以向前兼容可以自己实现这些方法 第一种 不需要固
  • Ubuntu系统下查看显卡相关信息

    查看显卡信息 root ubuntu home ubuntu lspci grep i vga 02 00 0 VGA compatible controller NVIDIA Corporation GM200 GeForce GTX T
  • Java将文件转换成二维码

    生成二维码主要代码为在步骤1 2中 下边后续步骤3 4 5涉及到具体的业务 要是用该工具类时需要拷贝前两个步骤代码即可 1 在项目pom xml文件中引入生成二维码的第三方依赖