激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java實現二維碼QRCode的編碼和解碼與示例解析

Java實現二維碼QRCode的編碼和解碼與示例解析

2020-06-02 11:45人生設計師 JAVA教程

本文主要介紹Java實現二維碼QRCode的編碼和解碼,這里給大家一個小示例以便理解,有需要的小伙伴可以參考下

Java實現二維碼QRCode的編碼和解碼

涉及到的一些主要類庫,方便大家下載:

編碼lib:Qrcode_swetake.jar   (官網介紹-- http://www.swetake.com/qr/index-e.html)            

解碼lib:qrcode.jar                 (官網介紹-- http://sourceforge.jp/projects/qrcode/

【一】、編碼:

Java代碼QRCodeEncoderHandler.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package michael.qrcode;
 
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
 
import javax.imageio.ImageIO;
 
import com.swetake.util.Qrcode;
 
/**
 * 二維碼生成器
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeEncoderHandler {
 
 /**
 * 生成二維碼(QRCode)圖片
 * @param content
 * @param imgPath
 */
 public void encoderQRCode(String content, String imgPath) {
 try {
 
 Qrcode qrcodeHandler = new Qrcode();
 qrcodeHandler.setQrcodeErrorCorrect('M');
 qrcodeHandler.setQrcodeEncodeMode('B');
 qrcodeHandler.setQrcodeVersion(7);
 
 System.out.println(content);
 byte[] contentBytes = content.getBytes("gb2312");
 
 BufferedImage bufImg = new BufferedImage(140, 140,
  BufferedImage.TYPE_INT_RGB);
 
 Graphics2D gs = bufImg.createGraphics();
 
 gs.setBackground(Color.WHITE);
 gs.clearRect(0, 0, 140, 140);
 
 // 設定圖像顏色> BLACK
 gs.setColor(Color.BLACK);
 
 // 設置偏移量 不設置可能導致解析出錯
 int pixoff = 2;
 // 輸出內容> 二維碼
 if (contentBytes.length > 0 && contentBytes.length < 120) {
 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
 for (int i = 0; i < codeOut.length; i++) {
  for (int j = 0; j < codeOut.length; j++) {
  if (codeOut[j][i]) {
  gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
  }
  }
 }
 } else {
 System.err.println("QRCode content bytes length = "
  + contentBytes.length + " not in [ 0,120 ]. ");
 }
 
 gs.dispose();
 bufImg.flush();
 
 File imgFile = new File(imgPath);
 
 // 生成二維碼QRCode圖片
 ImageIO.write(bufImg, "png", imgFile);
 
 } catch (Exception e) {
 e.printStackTrace();
 }
 
 }
 
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 String imgPath = "D:/test/twocode/Michael_QRCode.png";
 
 String content = "Hello 大大、小小,welcome to QRCode!"
 + "\nMyblog [ http://sjsky.iteye.com ]"
 + "\nEMail [ [email protected] ]" + "\nTwitter [ @suncto ]";
 
 QRCodeEncoderHandler handler = new QRCodeEncoderHandler();
 handler.encoderQRCode(content, imgPath);
 
 System.out.println("encoder QRcode success");
 }
}

運行后生成的二維碼圖片如下:

Java實現二維碼QRCode的編碼和解碼與示例解析

此時就可用手機的二維碼掃描軟件(本人用的:android 快拍二維碼 )來測試下,識別成功的截圖如下:

Java實現二維碼QRCode的編碼和解碼與示例解析

喜歡的朋友可以下載后試一試,做一些名片或者自己喜歡的東西。當然Java也可以對二維碼圖片解碼,具體看下面關于解碼的內容。

【二】、解碼:

Java代碼QRCodeDecoderHandler.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package michael.qrcode;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
 
/**
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeDecoderHandler {
 
 /**
 * 解碼二維碼
 * @param imgPath
 * @return String
 */
 public String decoderQRCode(String imgPath) {
 
 // QRCode 二維碼圖片的文件
 File imageFile = new File(imgPath);
 
 BufferedImage bufImg = null;
 String decodedData = null;
 try {
 bufImg = ImageIO.read(imageFile);
 
 QRCodeDecoder decoder = new QRCodeDecoder();
 decodedData = new String(decoder.decode(new J2SEImage(bufImg)));
 
 // try {
 // System.out.println(new String(decodedData.getBytes("gb2312"),
 // "gb2312"));
 // } catch (Exception e) {
 // // TODO: handle exception
 // }
 } catch (IOException e) {
 System.out.println("Error: " + e.getMessage());
 e.printStackTrace();
 } catch (DecodingFailedException dfe) {
 System.out.println("Error: " + dfe.getMessage());
 dfe.printStackTrace();
 }
 return decodedData;
 }
 
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 QRCodeDecoderHandler handler = new QRCodeDecoderHandler();
 String imgPath = "d:/test/twocode/Michael_QRCode.png";
 String decoderContent = handler.decoderQRCode(imgPath);
 System.out.println("解析結果如下:");
 System.out.println(decoderContent);
 System.out.println("========decoder success!!!");
 }
 
 class J2SEImage implements QRCodeImage {
 BufferedImage bufImg;
 
 public J2SEImage(BufferedImage bufImg) {
 this.bufImg = bufImg;
 }
 
 public int getWidth() {
 return bufImg.getWidth();
 }
 
 public int getHeight() {
 return bufImg.getHeight();
 }
 
 public int getPixel(int x, int y) {
 return bufImg.getRGB(x, y);
 }
 
 }
}

運行結果如下(解碼出的內容和之前輸入的內容一致 ):

解析結果如下:

Hello 大大、小小,welcome to QRCode!

Myblog [ http://sjsky.iteye.com ]

EMail [ [email protected] ]

Twitter [ @suncto ]

========decoder success!!!

以上就是對Java實現二維碼QRCode的編碼和解碼的資料整理,后續繼續補充相關資料,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区自拍a毛片在线视频 | 欧美精品videos | 欧美精品电影一区二区 | 国产1区在线观看 | 国产精品久久久久永久免费 | 国产久草视频在线 | 2级毛片 | 欧美一级淫片免费播放口 | 国产99视频精品免视看9 | av日韩一区二区三区 | 黄色va视频 | av在线收看 | 国产精品jk白丝蜜臀av软件 | 黄污网址 | 中国老女人一级毛片视频 | 国产日韩在线视频 | 一本色道久久综合亚洲精品图片 | 91美女视频在线观看 | 成人在线视频在线观看 | 久久免费视频一区 | av播播| 国内精品久久久久久久久久 | 在线观看va | av最新在线观看 | 美女福利视频国产 | 国产精品一品二区三区四区18 | 嗯~啊~弄嗯~啊h高潮视频 | 精品久久久久久国产三级 | 久色免费视频 | 欧美一级高清片在线 | 免费嗨片首页中文字幕 | 精品国产三级a | 国产福利视频 | 久久99国产精品久久99果冻传媒 | 成人午夜精品久久久久久久蜜臀 | 免费色片| 国产亚洲精品视频中文字幕 | 国产一区二区成人在线 | 欧美日韩免费看 | 嫩草影院在线观看网站成人 | 色播av在线 |