java學習-zxing產生二維碼矩陣的簡單例子

來源:互聯網
上載者:User

標籤:return   合成   getheight   技術分享   png   exists   try   object   i++   

這個例子需要使用google的開源項目zxing的核心jar包

core-3.2.0.jar

可以百度搜尋下載jar檔案

也可使用maven添加依賴

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

最簡單的產生二維碼的方法,

   /**     * 產生二維碼圖片     * @param dir        存放的目錄     * @param fileName  檔案名稱要以.jpg結尾     * @param content  這個內容可以是文字或連結     */    public void generateQRCode(String dir, String fileName, String content) {        //產生二維碼的寬高        int size = 200;        Map<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();        // 指定錯誤修正等級        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);        // 指定編碼格式        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");        try {            //encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints)            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, size, hints);            bitMatrix = updateBit(bitMatrix, 8);            File file1 = new File(dir);            if (!file1.exists()) {                file1.mkdirs();            }            //將產生的矩陣像素寫入到指定檔案中,這裡是以jpg結尾            MatrixToImageWriter.writeToStream(bitMatrix, "jpg", new FileOutputStream(dir + "/"+fileName));            System.out.println("建立成功");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (WriterException e) {            e.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }

這裡產生的二維碼留的白色邊距有點多,想要適當減小邊距,看下面

如果不想邊距太大,我們可以取得二維碼的真是寬高,然後建立立一個空的BitMatrix對象來放這個二維碼即可

margin為白色邊距的大小

private static BitMatrix updateBit(BitMatrix matrix, int margin) {        int tempM = margin * 2;        //left,top,width,height         // 0    1    2     3   對應的數組下標        //這裡的width和height是指去除白色邊框後的真實的二維碼長寬,而不是圖片長寬。        int[] rec = matrix.getEnclosingRectangle(); // 擷取二維碼圖案的屬性        int resWidth = rec[2] + tempM;//真實寬度加左右邊距        int resHeight = rec[3] + tempM;        BitMatrix resMatrix = new BitMatrix(resWidth, resHeight); // 按照自訂邊框產生新的BitMatrix        resMatrix.clear();        for (int i = margin; i < resWidth - margin; i++) { // 迴圈,將二維碼圖案繪製到新的bitMatrix中            for (int j = margin; j < resHeight - margin; j++) {                if (matrix.get(i - margin + rec[0], j - margin + rec[1])) {                    resMatrix.set(i, j);                }            }        }        return resMatrix;    }

產生二維碼

這樣白色邊距就不會太大了,好看多了

後面還有將二維碼嵌入到海報,或者其他活動圖表片上的方法,直接上代碼

public void insertQRCode(BufferedImage zxingImage, String backgroundPath) {        InputStream dest = null;        try {            dest = new FileInputStream(backgroundPath);            BufferedImage image = ImageIO.read(dest);            Graphics g = image.getGraphics();            int leftMargin = image.getWidth() - zxingImage.getWidth() - 10;            int topMargin = image.getHeight() - zxingImage.getHeight() - 10;            g.drawImage(zxingImage, leftMargin, topMargin, zxingImage.getWidth(), zxingImage.getHeight(), null);            ImageIO.write(image, "jpg", new FileOutputStream("D:\\QRCode\\zengmei.jpg"));            System.out.println("建立成功");                    } catch (IOException e) {            e.printStackTrace();        }    }

 

還有修改二維碼線條顏色,在二維碼中插入logo表徵圖等方法,下次繼續補充。

謝謝瀏覽

 參考連結:

https://www.cnblogs.com/qwqwQAQ/p/8118109.html

JAVA實現基於ZXing的二維碼自動產生與圖片合成

79744670

Java通過Zxing產生二維碼

http://blog.51cto.com/9732420/1742136

開源項目地址

https://github.com/zxing/zxing

 

java學習-zxing產生二維碼矩陣的簡單例子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.