java生成图片二维码
生活随笔
收集整理的這篇文章主要介紹了
java生成图片二维码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;import com.swetake.util.Qrcode;public class QRCodeUtils {/*** 二維碼可包含的內(nèi)容* EncodeMode** @author lipw* @date 2018年8月1日下午4:47:15*/public class EncodeMode {/*** N代表的是數(shù)字*/public final static char N = 'N';/*** A代表的是a-z*/public final static char A = 'A';/*** B代表的是其他字符*/public final static char B = 'B';}/*** 二維碼的容錯(cuò)能力等級* 二維碼容錯(cuò)率用字母表示,容錯(cuò)能力等級分為:L、M、Q、H四級* 二維碼具有容錯(cuò)功能,當(dāng)二維碼圖片被遮擋一部分后,仍可以掃描出來。* 容錯(cuò)的原理是二維碼在編碼過程中進(jìn)行了冗余,就像是123被編碼成123123,這樣只要掃描到一部分二維碼圖片,* 二維碼內(nèi)容還是可以被全部讀到。* 二維碼容錯(cuò)率即是指二維碼圖標(biāo)被遮擋多少后,仍可以被掃描出來的能力。容錯(cuò)率越高,則二維碼圖片能被遮擋的部分越多。* ErrorCorrect** @author lipw* @date 2018年8月1日下午4:49:17*/public class ErrorCorrect {/*** 低,最大 7% 的錯(cuò)誤能夠被糾正*/public final static char L = 'L';/*** 中,最大 15% 的錯(cuò)誤能夠被糾正*/public final static char M = 'M';/*** 中上,最大 25% 的錯(cuò)誤能夠被糾正*/public final static char Q = 'Q';/*** 高,最大 30% 的錯(cuò)誤能夠被糾正*/public final static char H = 'H';}/*** 基于 QRCode 創(chuàng)建二維碼** @param content 要寫入二維碼的內(nèi)容* @param savePath 完整的保存路徑* @param version 版本* @param logoPath 完整的logo路徑,可以為:null* @return* @author lipw* @date 2018年8月2日上午10:21:57*/public static boolean CreateQRCode(String content, String savePath, int version, String logoPath) {// 創(chuàng)建生成二維碼的對象Qrcode qrcode = new Qrcode();// 設(shè)置二維碼的容錯(cuò)能力等級qrcode.setQrcodeErrorCorrect(ErrorCorrect.M);// N代表的是數(shù)字,A代表的是a-z,B代表的是其他字符qrcode.setQrcodeEncodeMode(EncodeMode.B);// 版本qrcode.setQrcodeVersion(version);// 設(shè)置驗(yàn)證碼的大小int width = 67 + 12 * (version - 1);int height = 67 + 12 * (version - 1);// 定義緩沖區(qū)圖片BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 設(shè)置畫圖工具Graphics2D gs = bufferedImage.createGraphics();// 設(shè)置二維碼背景顏色gs.setBackground(Color.white);//lightGray// 設(shè)置顏色gs.setColor(Color.black);//cyan,green,red,black,pink// 清除畫板內(nèi)容gs.clearRect(0, 0, width, height);// 定義偏移量int pixoff = 2;// 填充的內(nèi)容轉(zhuǎn)化為字節(jié)數(shù)byte[] ctt;try {ctt = content.getBytes("utf-8");// 設(shè)置編碼方式if (ctt.length > 0 && ctt.length < 120) {boolean[][] s = qrcode.calQrcode(ctt);for (int i = 0; i < s.length; i++) {for (int j = 0; j < s.length; j++) {if (s[j][i]) {// 驗(yàn)證碼圖片填充內(nèi)容gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}}/* 判斷是否需要添加logo圖片 */if (logoPath != null) {File icon = new File(logoPath);if (icon.exists()) {int width_4 = width / 4;int width_8 = width_4 / 2;int height_4 = height / 4;int height_8 = height_4 / 2;Image img = ImageIO.read(icon);gs.drawImage(img, width_4 + width_8, height_4 + height_8, width_4, height_4, null);} else {System.out.println("Error: login圖片不存在!");}}// 結(jié)束寫入gs.dispose();// 結(jié)束內(nèi)存圖片bufferedImage.flush();// 保存生成的二維碼圖片ImageIO.write(bufferedImage, "png", new File(savePath));return true;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}public static void main(String[] args) {String content = "遙遙最美";String savePath = "C:\\Users\\lyyang\\Desktop\\qrcode.png";int version = 9;String logoPath = "C:\\Users\\lyyang\\Desktop\\a.png";boolean result = CreateQRCode(content, savePath, version, logoPath);if (result) {System.out.println("\n二維碼圖片生成成功!");} else {System.out.println("\n二維碼圖片生成失敗!");}}
}
?
總結(jié)
以上是生活随笔為你收集整理的java生成图片二维码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医疗器械网络安全定义
- 下一篇: WP网站主页备案号存放代码