package
?
com.reyo.code;?
??
?
import
?
java.awt.Color;?
import
?
java.awt.Graphics2D;?
import
?
java.awt.image.BufferedImage;?
import
?
java.io.File;?
import
?
java.io.IOException;?
import
?
java.io.InputStream;?
import
?
java.io.OutputStream;?
??
?
import
?
javax.imageio.ImageIO;?
??
?
import
?
jp.sourceforge.qrcode.QRCodeDecoder;?
import
?
jp.sourceforge.qrcode.exception.DecodingFailedException;?
??
?
import
?
com.swetake.util.Qrcode;?
??
?
public
?
class
?
TwoDimensionCode {?
??????
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param imgPath 图片路径
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,String imgPath) {?
????????
this
.encoderQRCode(content,imgPath,?
"png"
,?
7
);?
????
}?
??????
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param output 输出流
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,OutputStream output) {?
????????
this
.encoderQRCode(content,output,?
7
);?
????
}?
??????
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param imgPath 图片路径
?????
* @param imgType 图片类型
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,String imgPath,String imgType) {?
????????
this
.encoderQRCode(content,imgType,?
7
);?
????
}?
??????
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param output 输出流
?????
* @param imgType 图片类型
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,OutputStream output,String imgType) {?
????????
this
.encoderQRCode(content,?
10
);?
????
}?
??
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param imgPath 图片路径
?????
* @param imgType 图片类型
?????
* @param size 二维码尺寸
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,String imgType,?
int
?
size) {?
????????
try
?
{?
????????????
BufferedImage bufImg =?
this
.qRCodeCommon(content,size);?
??????????????
?
????????????
File imgFile =?
new
?
File(imgPath);?
????????????
????????????
ImageIO.write(bufImg,imgFile);?
????????
}?
catch
?
(Exception e) {?
????????????
e.printStackTrace();?
????????
}?
????
}?
??
?
????
/**
?????
* 生成二维码(QRCode)图片
?????
* @param content 存储内容
?????
* @param output 输出流
?????
* @param imgType 图片类型
?????
* @param size 二维码尺寸
?????
*/
?
????
public
?
void
?
encoderQRCode(String content,?
int
?
size) {?
????????
try
?
{?
????????????
BufferedImage bufImg =?
this
.qRCodeCommon(content,size);?
????????????
????????????
ImageIO.write(bufImg,output);?
????????
}?
catch
?
(Exception e) {?
????????????
e.printStackTrace();?
????????
}?
????
}?
??????
?
????
/**
?????
* 生成二维码(QRCode)图片的公共方法
?????
* @param content 存储内容
?????
* @param imgType 图片类型
?????
* @param size 二维码尺寸
?????
* @return
?????
*/
?
????
private
?
BufferedImage qRCodeCommon(String content,?
int
?
size) {?
????????
BufferedImage bufImg =?
null
;?
????????
try
?
{?
????????????
Qrcode qrcodeHandler =?
new
?
Qrcode();?
????????????
????????????
qrcodeHandler.setQrcodeErrorCorrect(
‘M‘
);?
????????????
qrcodeHandler.setQrcodeEncodeMode(
‘B‘
);?
????????????
????????????
qrcodeHandler.setQrcodeVersion(size);?
????????????
????????????
byte
[] contentBytes = content.getBytes(
"utf-8"
);?
????????????
????????????
int
?
imgSize =?
67
?
+?
12
?
* (size -?
1
);?
????????????
bufImg =?
new
?
BufferedImage(imgSize,imgSize,BufferedImage.TYPE_INT_RGB);?
????????????
Graphics2D gs = bufImg.createGraphics();?
????????????
????????????
gs.setBackground(Color.WHITE);?
????????????
gs.clearRect(
0
,?
0
,imgSize);?
??
?
????????????
????????????
gs.setColor(Color.BLACK);?
????????????
????????????
int
?
pixoff =?
2
;?
????????????
????????????
if
?
(contentBytes.length >?
0
?
&& contentBytes.length <?
800
) {?
????????????????
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
?
{?
????????????????
throw
?
new
?
Exception(
"QRCode content bytes length = "
?
+ contentBytes.length +?
" not in [0,800]."
);?
????????????
}?
????????????
gs.dispose();?
????????????
bufImg.flush();?
????????
}?
catch
?
(Exception e) {?
????????????
e.printStackTrace();?
????????
}?
????????
return
?
bufImg;?
????
}?
??????
?
????
/**
?????
* 解析二维码(QRCode)
?????
* @param imgPath 图片路径
?????
* @return
?????
*/
?
????
public
?
String decoderQRCode(String imgPath) {?
????????
????????
File imageFile =?
new
?
File(imgPath);?
????????
BufferedImage bufImg =?
null
;?
????????
String content =?
null
;?
????????
try
?
{?
????????????
bufImg = ImageIO.read(imageFile);?
????????????
QRCodeDecoder decoder =?
new
?
QRCodeDecoder();?
????????????
content =?
new
?
String(decoder.decode(
new
?
TwoDimensionCodeImage(bufImg)),?
"utf-8"
);??
????????
}?
catch
?
(IOException e) {?
????????????
System.out.println(
"Error: "
?
+ e.getMessage());?
????????????
e.printStackTrace();?
????????
}?
catch
?
(DecodingFailedException dfe) {?
????????????
System.out.println(
"Error: "
?
+ dfe.getMessage());?
????????????
dfe.printStackTrace();?
????????
}?
????????
return
?
content;?
????
}?
??????
?
????
/**
?????
* 解析二维码(QRCode)
?????
* @param input 输入流
?????
* @return
?????
*/
?
????
public
?
String decoderQRCode(InputStream input) {?
????????
BufferedImage bufImg =?
null
;?
????????
String content =?
null
;?
????????
try
?
{?
????????????
bufImg = ImageIO.read(input);?
????????????
QRCodeDecoder decoder =?
new
?
QRCodeDecoder();?
????????????
content =?
new
?
String(decoder.decode(
new
?
TwoDimensionCodeImage(bufImg)),?
"utf-8"
);??
????????
}?
catch
?
(IOException e) {?
????????????
System.out.println(
"Error: "
?
+ e.getMessage());?
????????????
e.printStackTrace();?
????????
}?
catch
?
(DecodingFailedException dfe) {?
????????????
System.out.println(
"Error: "
?
+ dfe.getMessage());?
????????????
dfe.printStackTrace();?
????????
}?
????????
return
?
content;?
????
}?
??
?
????
public
?
static
?
void
?
main(String[] args) {?
??????????
?
????????
String imgPath =?
"C:zhaochao.png"
;????
????????
String encoderContent =
""
;?
????????
for
(
int
?
i=
0
;i<
40
;i++)?
????????????????
encoderContent+=
"锐洋智能"
;?
??
?
????????
TwoDimensionCode handler =?
new
?
TwoDimensionCode();?????
??????????
?
????????
handler.encoderQRCode(encoderContent,
10
);?
??????????
?
????????
System.out.println(
"=============编码成功!图片为于:"
+imgPath+
"==============="
);?
??????????
?
????????
String decoderContent = handler.decoderQRCode(imgPath);?
????????
System.out.println(
"============解析结果如下:==============="
);?
????????
System.out.println(decoderContent);?
????????
System.out.println(
"=========解码成功==========="
);?
????
}?
}?