-
二维码生成器
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
|
package
com.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;
public
class
QRCodeGenerator {
private
static
QRCodeGenerator qrCodeGenerator =
new
QRCodeGenerator();
private
QRCodeGenerator(){}
public
static
QRCodeGenerator getInstance(){
return
qrCodeGenerator;
}
public
void
generatrQRCode(String content, String imgPath) {
try
{
Qrcode qrcodeHandler =
new
Qrcode();
qrcodeHandler.setQrcodeErrorCorrect(
'M'
);
qrcodeHandler.setQrcodeEncodeMode(
'B'
);
qrcodeHandler.setQrcodeVersion(
7
);
byte
[] contentBytes = content.getBytes();
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) {
throw
new
RuntimeException(e);
}
}
}
|
2. 二维码解析器
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
|
package
com.qrcode;
import
java.awt.image.BufferedImage;
import
java.io.File;
import
javax.imageio.ImageIO;
import
jp.sourceforge.qrcode.QRCodeDecoder;
import
jp.sourceforge.qrcode.data.QRCodeImage;
public
class
QRCodeParser {
private
static
QRCodeParser qrCodeParser =
new
QRCodeParser();
private
QRCodeParser(){}
public
static
QRCodeParser getInstance(){
return
qrCodeParser;
}
public
String parseQRCode(String imgPath) {
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)));
}
catch
(Exception e) {
throw
new
RuntimeException(e);
}
return
decodedData;
}
private
class
J2SEImage
implements
QRCodeImage {
private
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);
}
}
}
|
3.测试
1
2
3
4
5
6
7
8
9
10
11
12
|
package
com.qrcode;
public
class
Main {
public
static
void
main(String[] args) {
String content=
"这是我的QRCode"
;
String imgPath=
"E:/mine/j2ee/QRCode/src/main/java/abc.png"
;
QRCodeGenerator.getInstance().generatrQRCode(content, imgPath);
String result = QRCodeParser.getInstance().parseQRCode(imgPath);
System.out.println(result);
}
}
|
附件是二维码生成,解析所需的jars.
附件:http://down.51cto.com/data/2365896
本文转自 antlove 51CTO博客,原文链接:http://blog.51cto.com/antlove/1672762