Java二維碼生成器

2021-02-25 程式設計師的時光

二維碼的原理

         二維條形碼最早發明於日本,它是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的,在代碼編制上巧妙地利用構成計算機內部邏輯基礎的「0」、「1」比特流的概念,使用若干個與二進位相對應的幾何形體來表示文字數值信息,通過圖象輸入設備或光電掃描設備自動識讀以實現信息自動處理。

Java的的的生成二維碼,解析二維碼,保存為圖片
1.利用Google的ZXing工具包,生成和解析二維碼圖片,如果是maven項目則引入pom.xml中的依賴為

<!-- 二維碼 -->

<dependency>

<groupId>com.google.zxing</groupId>

<artifactId>core</artifactId>

<version>3.3.0</version>

</dependency>

<!-- io -->

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>

2.根據內容,生成指定寬高,指定格式的二維碼圖片,這一步已經可以生成二維碼圖片了,可以掃面跳轉到制定連結了

/**

     * 根據內容,生成指定寬高、指定格式的二維碼圖片

     *

     * @param text   內容

     * @param width  寬

     * @param height 高

     * @param format 圖片格式

     * @return 生成的二維碼圖片路徑

     * @throws Exception

     */

    public static String generateQRCode(String text, int width, int height, String format) throws Exception {

        Hashtable<EncodeHintType, Object> hints = new Hashtable<>();

        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");

        BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);

 

        String pathName = "D:/qrCode/QrCodeDemo.jpg";

        File outputFile = new File(pathName);

        if (!outputFile.exists()) {

            outputFile.mkdirs();

        }

        MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);

        return pathName;

    }

3.此方法為谷歌提供,用於生成二維碼

import com.google.zxing.common.BitMatrix;

 

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.io.OutputStream;

 

/**

 *  用於二維碼的生成,由Google提供。

 *

 * Created by dengxincheng on 2017/10/20.

 */

public final class MatrixToImageWriter {

 

    private static final int BLACK = 0xFF000000;

    private static final int WHITE = 0xFFFFFFFF;

 

    private MatrixToImageWriter() {}

 

 

    public 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;

    }

 

    //輸出為文件

    public static void writeToFile(BitMatrix matrix, String format, File file)

            throws IOException {

        BufferedImage image = toBufferedImage(matrix);

        if (!ImageIO.write(image, format, file)) {

            throw new IOException("Could not write an image of format " + format + " to " + file);

        }

    }

 

    //輸出為流

    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)

            throws IOException {

        BufferedImage image = toBufferedImage(matrix);

        if (!ImageIO.write(image, format, stream)) {

            throw new IOException("Could not write an image of format " + format);

        }

    }

}

4.解析指定路徑下的二維碼圖片內容

 /**

     * 解析指定路徑下的二維碼圖片

     * @param filePath 二維碼圖片路徑

     * @return

     */

    private static String parseQRCode(String filePath) {

        String content = "";

        try {

            File file = new File(filePath);

            BufferedImage image = ImageIO.read(file);

            LuminanceSource source = new BufferedImageLuminanceSource(image);

            Binarizer binarizer = new HybridBinarizer(source);

            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

            Map<DecodeHintType, Object> hints = new HashMap<>();

            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

            MultiFormatReader formatReader = new MultiFormatReader();

            Result result = formatReader.decode(binaryBitmap, hints);

 

            System.out.println("result 為:" + result.toString());

            System.out.println("resultFormat 為:" + result.getBarcodeFormat());

            System.out.println("resultText 為:" + result.getText());

            //設置返回值

            content = result.getText();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return content;

    }

測試代碼:

public static void main(String[] args) {

 

        String text = "https://www.csdn.net/";

        System.out.println("二維碼的內容為:" + text);

        int width = 300;    //二維碼圖片的寬

        int height = 300;   //二維碼圖片的高

        String format = "jpg";  //二維碼圖片的格式

 

        try {

            //生成二維碼圖片,並返回圖片路徑

            String pathName = generateQRCode(text, width, height, format);

            System.out.println("生成二維碼的圖片路徑:" + pathName);

            String content = parseQRCode(pathName);

 

            System.out.println("解析出二維碼的圖片的內容為:" + content);

        } catch (Exception e) {

            e.printStackTrace();

        }

 

    }

最後在你的文件目錄中就可以找到對應的二維碼了!

相關焦點

  • 二維碼生成器
    二維碼生成器 系統安全 大小: 1.92M
  • 二維碼文字生成器
    二維碼文字生成器 生活工具 大小: 5.11M
  • WIFI二維碼生成器
    WIFI二維碼生成器 系統安全 大小: 1.62MB
  • 二維碼還可以這樣用!二維碼生成器教程
    1.掃描二維碼複製電腦文字  通過在線的二維碼生成器,將電腦端想要複製到手機的文字粘貼到對話框中,點擊「生成二維碼」即可一鍵完成二維碼生成。再使用手機掃描生成的二維碼即可在手機端獲得需要複製的文字,這種方法適用於大量文字粘貼的情況。
  • 分享5個國外最好的在線二維碼生成器
    目前,不論是公司網站/個人網站,甚至媒介平臺都喜歡貼上自己的二維碼(QR),一來可以迎合市場的需求,二來獲取眾人的眼球。打開我們的網站,看 到路邊的海報,如果看到二維碼,我們是不是都喜歡掏出手機然後對準進行掃描查看到底是什麼?
  • 前端: 如何利用Qrcode製作一個二維碼生成器?
    玲琅滿目的二維碼在我們的都市和朋友圈中隨處可見, 很多平臺都提供了定製二維碼的服務, 那麼作為一名程式設計師, 我們如何自己實現一個簡單的二維碼生成器呢? 接下來筆者就來帶大家一起利用Qrcode實現一個二維碼生成器.
  • 試試二維碼生成器吧
    讓二維碼生成器來幫你吧。把生成的二維碼掛牆上,想知道WiFi密碼的去掃吧  現在,可以為你生成二維碼的應用軟體、網站,包括一些提供相關QR碼服務的個體商家越來越多,試試在網上搜索「二維碼生成器」吧。將生成的二維碼列印出來,需要的人掃一掃就可以獲取到你的WiFi密碼啦。[返回頻道首頁] 相關閱讀條形碼的18歲成人禮 綜述二維碼那點事兒//network.pconline.com.cn/news/1211/3055371.html
  • 無垠式 Java 通用代碼生成器經典版本最新更新版0.85
    無垠式Java通用代碼生成器經典版本最新更新版0.8.5發布了。 此版本基於經典的無垠式代碼生成器三引擎版0.8.0。包含simplejee,s2sh和s2shc三種技術棧。
  • Java通用代碼生成器光發布1.5.0 嘗鮮版 2,支持 PDF 導出功能
    項目地址:https://gitee.com/jerryshensjf/LightSBMEU第三代動詞算子式代碼生成器:光SBMEU版本代碼生成器支持前後端分離界面了簡介第三代動詞算子式代碼生成器:光SBMEU版,採用Maven, EasyUI,SpringBoot 2, MyBatis, MariaDB 技術棧歡迎大家使用由無垠式
  • Excel製作二維碼生成器,會vba就是不一般
    二維碼生成器,想必不陌生,用Excel vba 可以很好地生成二維碼。在一些信息記錄過程當中,也有一些實際的用處。下面介紹一下如何用vba代碼生成二維碼。下面看下效果圖左側是生成的二維碼,右側是一個文本框,輸入要二維碼存儲的信息。
  • 光之翼 Java 通用代碼生成器 1.0.0 Beta 2 版已公布,修復編譯錯和...
    光之翼Java通用代碼生成器1.0.0Beta 2版已公布,修復編譯錯和編譯警告,所有示例通過測試。
  • Java 通用代碼生成器光 1.5.0 Kama(頓悟)發布 Beta5 版,詳盡測試...
    項目地址:https://gitee.com/jerryshensjf/LightSBMEU二進位發布版下載地址:https://gitee.com/jerryshensjf/LightSBMEU/attach_files第三代動詞算子式代碼生成器:光SBMEU版本代碼生成器支持前後端分離界面了簡介第三代動詞算子式代碼生成器:光SBMEU
  • Java 通用代碼生成器光 1.5.0 Kama (頓悟)發布 Beta8 版,精細測試...
    項目地址:https://gitee.com/jerryshensjf/LightSBMEU二進位發布版下載地址:https://gitee.com/jerryshensjf/LightSBMEU/attach_files第三代動詞算子式代碼生成器:光SBMEU版本代碼生成器支持前後端分離界面了簡介第三代動詞算子式代碼生成器:光SBMEU版,採用Maven
  • java生成隨機數的五種方法
    當第一次調用 Math.random() 方法時,自動創建了一個偽隨機數生成器,實際上用的是 new java.util.Random()。當接下來繼續調用 Math.random() 方法時,就會使用這個新的偽隨機數生成器。
  • Java 通用代碼生成器光 2.0.0 Insight(內省) 發布 Beta 版,可以...
    項目地址:https://gitee.com/jerryshensjf/LightSBMEU二進位發布版下載地址:https://gitee.com/jerryshensjf/LightSBMEU/attach_files第三代動詞算子式代碼生成器:光SBMEU版本代碼生成器支持前後端分離界面了開發者手冊已在本站附件處公布
  • Java 生成隨機數的 5 種方式,你知道幾種?
    當第一次調用 方法時,自動創建了一個偽隨機數生成器,實際上用的是 。當接下來繼續調用 方法時,就會使用這個新的偽隨機數生成器。 什麼情況下隨機數的生成線程安全:靜態方法使用 線程1在第一次調用 時產生一個生成器 ,使用當前時間作為種子。 線程2在第一次調用 時發現已經有一個生成器 ,則直接使用生成器。
  • JEECG 3.7.7 發布,增加多套主流 UI 代碼生成器模板
    【新功能】一套新的代碼生成器模板,Bootstrap表單+EasyUI列表(單表、一對多);【新功能】一套新的代碼生成器模板,Bootstrap表單+EasyUI原生列表(單表、一對多);【新功能】一套新的代碼生成器模板, Boostrap表單+BootstapTable原生列表;
  • Java 通用代碼生成器光 2.0.0 Insight(內省) 發布嘗鮮版 4,代碼...
    如此先進靈活和易用的代碼生成器,您值得一試。讓代碼生成器成為大家開發Java程序的一項優勢簡介第三代動詞算子式代碼生成器:光SBMEU版,採用Maven, EasyUI,SpringBoot 2, MyBatis, MariaDB 技術棧歡迎大家使用由無垠式,和平之翼和光三代動詞算子式代碼生成器組成的動詞算子式代碼生成器陣列,在我的碼雲站點https://gitee.com/jerryshensjf
  • QR Blaster:多彩又個性的二維碼生成器
    QR Blaster還記得之前酷站介紹過的個性多彩QR碼生成器Unitag.fr麼?是的,QR碼也應該有閃亮驚豔的一天,一改之前黑白兩色古板的造型!酷站今天推 薦的QR Blaster仍是一款免費在線自定義QR碼生成器。QR碼應用範圍更廣泛,製作步驟更簡單。方便又好用的工具多多益善!打開網站無需註冊,只需4個步驟就可以輕鬆搞定QR碼製作。
  • Java 通用代碼生成器光 2.0.0 Insight(內省) 發布 Beta2 版,代碼...
    內省包含的第二個功能群是動詞否定,這個功能群允許您調整代碼生成器生成的功能,某個功能如果是不需要的,簡單,否定掉就行了。比如某個對象不可以刪除,但可以軟刪除,簡單,您只需要否定Delete和DeleteAll就可以了。如此先進靈活和易用的代碼生成器,您值得一試。