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. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

QrCode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章