JAVA Qrcode實現帶有logo的二維碼(源碼)

閒來無事,搞個二維碼玩玩(生成的二維碼不讓往頭條裡放)

用的是Qrcode_swetake.jar包(可以從網上下載,也可以私信我)

源碼(直接拷走,導入jar就可以了,感興趣的可以試試):

package an.common;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

public class QrcodeUtil {

public static void main(String[] args) throws IOException {

//調用生成二維碼的方法

getorcodeImg("https://www.toutiao.com/c/user/16038770057/#mid=1571462165285889","D:/qrcode.png","G:/qrlogo.png");

}

/**

* 製作二維碼(喜歡的話右上角關注)

* @param content 掃描二維碼將要跳轉的地址

* @param imgPath 生產二位碼的地址和名稱

* @param logoPath 二維碼中間的那個圖片地址

* @throws IOException

*/

public static void getorcodeImg(String content,String imgPath,String logoPath) throws IOException {

Qrcode qr = new Qrcode();

//vs是版本號

int vs =20;

//API文檔規定計算二維碼圖片寬高的方式

int width = 67 + 12 * (vs - 1);

int height = 67 + 12 * (vs - 1);

/**

* 糾錯等級分為

* level L : 最大 7% 的錯誤能夠被糾正;

* level M : 最大 15% 的錯誤能夠被糾正;

* level Q : 最大 25% 的錯誤能夠被糾正;

* level H : 最大 30% 的錯誤能夠被糾正;

*/

qr.setQrcodeErrorCorrect('L');

//設置編碼格式

qr.setQrcodeEncodeMode('B');

//設置版本號 1-40

qr.setQrcodeVersion(vs);

//漢字轉格式需要拋出異常

byte[] con = content.getBytes("utf-8");

//緩衝區(面板)

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

//繪圖(畫筆)

Graphics2D gs = bufferedImage.createGraphics();

//設置背景色

gs.setBackground(Color.WHITE);

//設置繪製內容的顏色

gs.setColor(Color.BLACK);

//設置二維碼繪製區域

gs.clearRect(0, 0, width, height);

//是否會引起字符串長度大於120導致生成代碼不執行,二維碼空白

if (con.length > 0 && con.length < 120) {

boolean[][] qrc = qr.calQrcode(con);

for (int i = 0; i < qrc.length; i++) {

for (int j = 0; j < qrc.length; j++) {

if (qrc[j][i]) {

gs.fillRect(j*3+2, i*3+2, 3, 3);

}

}

}

}

//添加水印圖片(logo)

File logoFile=new File(logoPath);

Image srcimage=ImageIO.read(logoFile);

//logo的寬高

int lgWidth=srcimage.getWidth(null);

int lgHeight=srcimage.getHeight(null);

gs.drawImage(srcimage, (width-lgWidth)/2, (height-lgHeight)/2, lgWidth, lgHeight,null);

gs.dispose();

bufferedImage.flush();

//設置圖片格式,與輸出的路徑

ImageIO.write(bufferedImage, "png", new File(imgPath));

System.out.println("二維碼完成");

}

}

新手上路多多關注,持續更新。

分享一些工作中遇到的問題都會記錄下來,和一些好的資源都會分享給大家。

希望多多支持小編。

閒來無事,搞個二維碼玩玩(生成的二維碼不讓往頭條裡放)

用的是Qrcode_swetake.jar包(可以從網上下載,也可以私信我)

源碼(直接拷走,導入jar就可以了,感興趣的可以試試):

package an.common;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

public class QrcodeUtil {

public static void main(String[] args) throws IOException {

//調用生成二維碼的方法

getorcodeImg("https://www.toutiao.com/c/user/16038770057/#mid=1571462165285889","D:/qrcode.png","G:/qrlogo.png");

}

/**

* 製作二維碼(喜歡的話右上角關注)

* @param content 掃描二維碼將要跳轉的地址

* @param imgPath 生產二位碼的地址和名稱

* @param logoPath 二維碼中間的那個圖片地址

* @throws IOException

*/

public static void getorcodeImg(String content,String imgPath,String logoPath) throws IOException {

Qrcode qr = new Qrcode();

//vs是版本號

int vs =20;

//API文檔規定計算二維碼圖片寬高的方式

int width = 67 + 12 * (vs - 1);

int height = 67 + 12 * (vs - 1);

/**

* 糾錯等級分為

* level L : 最大 7% 的錯誤能夠被糾正;

* level M : 最大 15% 的錯誤能夠被糾正;

* level Q : 最大 25% 的錯誤能夠被糾正;

* level H : 最大 30% 的錯誤能夠被糾正;

*/

qr.setQrcodeErrorCorrect('L');

//設置編碼格式

qr.setQrcodeEncodeMode('B');

//設置版本號 1-40

qr.setQrcodeVersion(vs);

//漢字轉格式需要拋出異常

byte[] con = content.getBytes("utf-8");

//緩衝區(面板)

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

//繪圖(畫筆)

Graphics2D gs = bufferedImage.createGraphics();

//設置背景色

gs.setBackground(Color.WHITE);

//設置繪製內容的顏色

gs.setColor(Color.BLACK);

//設置二維碼繪製區域

gs.clearRect(0, 0, width, height);

//是否會引起字符串長度大於120導致生成代碼不執行,二維碼空白

if (con.length > 0 && con.length < 120) {

boolean[][] qrc = qr.calQrcode(con);

for (int i = 0; i < qrc.length; i++) {

for (int j = 0; j < qrc.length; j++) {

if (qrc[j][i]) {

gs.fillRect(j*3+2, i*3+2, 3, 3);

}

}

}

}

//添加水印圖片(logo)

File logoFile=new File(logoPath);

Image srcimage=ImageIO.read(logoFile);

//logo的寬高

int lgWidth=srcimage.getWidth(null);

int lgHeight=srcimage.getHeight(null);

gs.drawImage(srcimage, (width-lgWidth)/2, (height-lgHeight)/2, lgWidth, lgHeight,null);

gs.dispose();

bufferedImage.flush();

//設置圖片格式,與輸出的路徑

ImageIO.write(bufferedImage, "png", new File(imgPath));

System.out.println("二維碼完成");

}

}

新手上路多多關注,持續更新。

分享一些工作中遇到的問題都會記錄下來,和一些好的資源都會分享給大家。

希望多多支持小編。

JAVA Qrcode實現帶有logo的二維碼(源碼)

相關推薦

推薦中...