设为首页 加入收藏

TOP

JavaFx 生成二维码工具类封装(一)
2023-07-25 21:29:16 】 浏览:69
Tags:JavaFx 成二维 封装

原文地址: JavaFx 生成二维码工具类封装 - Stars-One的杂货小窝

之前星之音乐下载器有需要生成二维码功能,当时用的是一个开源库来实现的,但是没过多久,发现那个库依赖太多,有个http-client的依赖,把软件都搞大了一倍,而且有时候开发的时候下载依赖还报错,就想换个方案

于是在网上找了下解决方案,最终只需要依赖两个zxing的两个依赖即可实现功能

本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本,工具类已经封装在common-controls库中

工具支持带logo图标,带底部文本的二维码生成

代码封装

1.引入依赖

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.5.0</version>
</dependency>

2.使用

由于工具代码过多不便阅读,就先讲些使用,工具代码就放下面了

比较核心的就两个方法,如下面代码所示,其他的方法是带Swing关键字,就是生成Swing包中的Image对象

getQRcodeFxImg()方法就是直接生成Fx的Image对象,可以JavaFx中直接使用

/**
 * 初始化设置
 *
 * @param qrcodeSize 二维码尺寸,默认为320(即320*320)
 * @param logoSize logo图标尺寸,默认为80(即80*80)
 * @param bottomTextSize 底部文字大小,默认20px
 * @param qrcodeType 二维码图片格式,默认为png
 */
fun initConfig(qrcodeSize: Int = 320, logoSize: Int = 80, bottomTextSize: Int = 20, qrcodeType: String = "PNG")

/**
 * 生成二维码图片
 *
 * @param data 二维码文本内容
 * @param logoPath 图标图片的路径
 * @param bottomText 底部文字
 * @return fx的img对象
 */
fun getQRcodeFxImg(data: String?, logoPath: String?=null, bottomText: String?=null): WritableImage

使用的话也比较简单:

//得到的swing的image对象
val buImg = QRCodeUtil.getQRcodeFxImg("这是测试文本")
val buImg1 = QRCodeUtil.getQRcodeFxImg("这是测试文本", null, "底部文字")
val buImg2 = QRCodeUtil.getQRcodeFxImg("这是测试文本", "/x5.jpg", "底部文字")

val list = listOf(buImg, buImg1, buImg2)

hbox(20.0) {
    list.forEach {
        imageview(it) {
            fitWidth = 200.0
            fitHeight = 200.0
        }
    }
}

3.工具库代码

/**
 * 二维码生成工具类
 * Created by stars-one
 */
object QRCodeUtil {
    private var QRCODE_SIZE = 320 // 二维码尺寸,宽度和高度均是320
    private var LOGO_SIZE = 80 // 二维码里logo的尺寸,宽高一致 80*80
    private var BOTTOM_TEXT_SIZE = 20 // 底部文本的文字大小
    private var FORMAT_TYPE = "PNG" // 二维码图片类型

    /**
     * 初始化设置
     *
     * @param qrcodeSize 二维码尺寸,默认为320(即320*320)
     * @param logoSize logo图标尺寸,默认为80(即80*80)
     * @param bottomTextSize 底部文字大小,默认20px
     * @param qrcodeType 二维码图片格式,默认为png
     */
    fun initConfig(qrcodeSize: Int = 320, logoSize: Int = 80, bottomTextSize: Int = 20, qrcodeType: String = "PNG") {
        QRCODE_SIZE = qrcodeSize
        LOGO_SIZE = logoSize
        BOTTOM_TEXT_SIZE = bottomTextSize
        FORMAT_TYPE = qrcodeType
    }

    /**
     * 生成二维码图片
     *
     * @param data 二维码文本内容
     * @param logoPath 图标图片的路径
     * @param bottomText 底部文字
     * @return
     */
    fun getQRcodeFxImg(data: String?, logoPath: String?=null, bottomText: String?=null): WritableImage {
        val resources = ResourceLookup(this)
        val url = if (logoPath == null) {
            null
        } else {
            resources.url(logoPath)
        }
        val swingImg = getQRCodeSwingImg(data, url, bottomText)
        return SwingFXUtils.toFXImage(swingImg,null)
    }

    /**
     * 默认需要logo,无底部文字
     * 返回 BufferedImage 可以使用ImageIO.write(BufferedImage, "png", outputStream);输出
     *
     * @param dataStr
     * @return 返回 BufferedImage 可以使用ImageIO.write(BufferedImage, "png", outputStream);输出
     */
    @Throws(Exception::class)
    fun getQRCodeSwingImg(dataStr: String?): BufferedImage {
        return getQRCodeSwingImg(dataStr, null, null)
    }

    /**
     * 默认需要logo,无底部文字
     *
     * @param dataStr
     * @return 返回字节数组
     */
    @Throws(Exception::class)
    fun getQR
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇订单30分钟未支付自动取消怎么实.. 下一篇当 SQL Server(mssql-jdbc) 遇..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目