Quick-Media 中文二维码支持

Quick-Media 中文二维码支持

Quick-Media 项目提供了一些列多媒体操作的开箱即用工具类,比如图片编辑合成,markdown/html/svg渲染,音频处理;当然还有本文重点说明的二维码生成解析

QrCode-Plugin支持丰富的酷炫二维码生成,大概十来天前有个小伙伴提了一个非常有意思的方向,能否将二维码中的黑白方块换成中文

趁着端午放假前夕的空闲时间,把这个集成在QrCode插件中,生成效果如下(从左往右,从上往下读,千字文😝)

I. 使用说明

1. maven导入

对于java环境的小伙伴,可以借助maven引入依赖包

<repositories>
    <repository>
        <id>yihui-maven-repo</id>
        <url>https://raw.githubusercontent.com/liuyueyi/maven-repository/master/repository</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.github.hui.media</groupId>
    <artifactId>qrcode-plugin</artifactId>
    <version>2.4.1</version>
</dependency>

或者使用jitpack导入依赖也是可以的

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>


<!-- 请注意groupId和github的方式有一些区别哦 -->
<dependency>
    <groupId>com.github.liuyueyi.quick-media</groupId>
    <artifactId>qrcode-plugin</artifactId>
    <version>2.4</version>
</dependency>

2. 源码方式

对于源码的使用方式就比较简单了,下载源码,直接在test目录下编写测试case即可

源码地址: Quick-Media

3. 使用case

先来看一下,如何生成文字二维码,一个最简单的使用case如下

/**
 * 文字二维码,顺序方式渲染
 */
@Test
public void fontQr1() {
    String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
    try {
        boolean ans = QrCodeGenWrapper.of(msg)
                .setErrorCorrection(ErrorCorrectionLevel.H)
                // 指定渲染模式为TXT即可
                .setDrawStyle(QrCodeOptions.DrawStyle.TXT)
                .setPicType("png")
                .asFile("/tmp/fontQr1.png");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

上面的使用可以说非常简单明了,QrCode-Plugin默认提供的文字集为千字文,字体为宋体,如果希望生成最上面的二维码(三个标准的探测图形,识别率更高)加一个选项.setDetectSpecial()即可

/**
 * 文字二维码,顺序方式渲染
 */
@Test
public void fontQr2() {
    String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";

    try {
        boolean ans = QrCodeGenWrapper.of(msg)
                // 不输入文字时,默认采用千字文
                // 默认文字顺序渲染
                // true 则探测图形有自己的绘制规则
                .setDetectSpecial()
                .setErrorCorrection(ErrorCorrectionLevel.H)
                .setDrawStyle(QrCodeOptions.DrawStyle.TXT)
                .setPicType("png")
                .asFile("/tmp/fontQr2.png");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

当然我们也可以用自定义的文字来生成二维码,并指定选择文字的方式为随机

/**
 * 文字二维码
 */
@Test
public void fontQr3() {
    String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";

    try {
        boolean ans = QrCodeGenWrapper.of(msg)
                .setQrText("欢迎关注一灰灰")
                // 指定文字随机渲染方式
                .setQrTxtMode(QrCodeOptions.TxtMode.RANDOM)
                // true 则探测图形有自己的绘制规则
                .setDetectSpecial()
                .setErrorCorrection(ErrorCorrectionLevel.H)
                .setDrawStyle(QrCodeOptions.DrawStyle.TXT)
                // 当相邻的NxN都是黑色小方块时,放大(慎用,因为部分汉子如 `一` 无法友好的填充2x2的方块)
                .setDrawEnableScale(true)
                .setPicType("png")
                .asFile("/tmp/fontQr3.png");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4. 背景文字

除了上面这种文字方式之外,还有一种如下图的这种,二维码显示一个字的情况

上面这个二维码,主要是借助背景图的渲染方式来实现,背景图上为一张浅灰底色,红字,二维码采用PENETRATE背景图穿透的模式,具体实现如下

@Test
public void bgQrTxt() {
    try {
        String msg = "http://weixin.qq.com/r/FS9waAPEg178rUcL93oH";
        BufferedImage bgImg = GraphicUtil.createImg(500, 500, null);
        Graphics2D g2d = GraphicUtil.getG2d(bgImg);
        g2d.setColor(Color.LIGHT_GRAY);
        g2d.fillRect(0, 0, 500, 500);

        Font font = new Font("宋体", Font.BOLD, 500);
        g2d.setFont(font);
        g2d.setColor(Color.RED);
        g2d.drawString("码", 0, 500 - g2d.getFontMetrics().getDescent() / 2);
        g2d.dispose();

        boolean ans =
                QrCodeGenWrapper.of(msg).setBgImg(bgImg).setBgStyle(QrCodeOptions.BgImgStyle.PENETRATE).setBgW(500)
                        .setBgH(500).setW(500).asFile("/tmp/bqrTxt.png");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

II. 其他

1. 一灰灰Blog: https://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值