需要使用到的jar包:QRCode.jar
1、新建类1。TwoDimensionCode.java
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 {
/**
* 二维码图片的尺寸大小
*/
public static int twoDimensionSize = 10;
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramimgPath图片路径
*/
public void encoderQRCode(String content,String imgPath){
this.encoderQRCode(content,imgPath,"jpg",twoDimensionSize);
}
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramoutput输出流
*/
public void encoderQRCode(String content,OutputStream output){
this.encoderQRCode(content,output,"jpg",twoDimensionSize);
}
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramimgPath图片路径
*@paramimgType图片类型
*/
public void encoderQRCode(String content,String imgPath,String imgType){
this.encoderQRCode(content,imgPath,imgType,twoDimensionSize);
}
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramoutput输出流
*@paramimgType图片类型
*/
public void encoderQRCode(String content,OutputStream output,String imgType){
this.encoderQRCode(content,output,imgType,twoDimensionSize);
}
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramimgPath图片路径
*@paramimgType图片类型
*@paramsize二维码尺寸
*/
public void encoderQRCode(String content,String imgPath,String imgType,int size){
try{
BufferedImage bufImg=this.qRCodeCommon(content,imgType,size);
File imgFile=new File(imgPath);
//生成二维码QRCode图片
ImageIO.write(bufImg,imgType,imgFile);
}catch(Exception e){
e.printStackTrace();
}
}
/**
*生成二维码(QRCode)图片
*@paramcontent存储内容
*@paramoutput输出流
*@paramimgType图片类型
*@paramsize二维码尺寸
*/
public void encoderQRCode(String content,OutputStream output,String imgType,int size){
try{
BufferedImage bufImg = this.qRCodeCommon(content,imgType,size);
//生成二维码QRCode图片
ImageIO.write(bufImg,imgType,output);
}catch(Exception e){
e.printStackTrace();
}
}
/**
*生成二维码(QRCode)图片的公共方法
*@paramcontent存储内容
*@paramimgType图片类型
*@paramsize二维码尺寸
*@return
*/
public BufferedImage qRCodeCommon(String content,String imgType,int size){
BufferedImage bufImg=null;
try{
Qrcode qrcodeHandler=new Qrcode();
//设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
//设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
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,imgSize);
//设定图像颜色>BLACK
gs.setColor(Color.BLACK);
//设置偏移量,不设置可能导致解析出错
int pixoff=2;
//输出内容>二维码
if(contentBytes.length>0&&contentBytes.length<800){
boolean[][]codeOut=qrcodeHandler.calQrcode(contentBytes);
for(int i=0;i
gs.fillRect(j*3+pixoff,i*3+pixoff,3,3);
}
}
}
}else{
throw new Exception("QRCodecontentbyteslength="+contentBytes.length+"notin[0,800].");
}
gs.dispose();
bufImg.flush();
}catch(Exception e){
e.printStackTrace();
}
return bufImg;
}
/**
*解析二维码(QRCode)
*@paramimgPath图片路径
*@return
*/
public String decoderQRCode(String imgPath){
//QRCode二维码图片的文件
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)
*@paraminput输入流
*@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="D:/QRCodeTest/Michael_QRCode.jpg";
String encoderContent="Hello大大、小小,welcometoQRCode!"+"\nMyblog[aaa]"+"\nEMail[bbb]";
encoderContent="http://www.baidu.com";
TwoDimensionCode handler=new TwoDimensionCode();
TwoDimensionCode.twoDimensionSize=7;
handler.encoderQRCode(encoderContent,imgPath,"jpg");
//try{
//OutputStreamoutput=newFileOutputStream(imgPath);
//handler.encoderQRCode(content,output);
//}catch(Exceptione){
//e.printStackTrace();
//}
System.out.println("========encodersuccess");
String decoderContent=handler.decoderQRCode(imgPath);
System.out.println("解析结果如下:");
System.out.println(decoderContent);
System.out.println("========decodersuccess!!!");
}
}
2、新建类2。
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
public class TwoDimensionCodeImage implements QRCodeImage{
BufferedImage bufImg;
public TwoDimensionCodeImage(BufferedImage bufImg) {
this.bufImg = bufImg;
}
public int getHeight(){
return bufImg.getHeight();
}
public int getPixel(int x, int y) {
return bufImg.getRGB(x, y);
}
public int getWidth(){
return bufImg.getWidth();
}
}
3、新建servlet的二维码类
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.abchina.plantix.sample.multilist.contract.TwoDimensionCode;
public class PrintTwoBarCodeServlet extends HttpServlet{
/**
* 专门用来生成二维码图片的servlet
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String code = request.getParameter("code");
int size = null==request.getParameter("size")?7:Integer.valueOf(request.getParameter("size").toString());
TwoDimensionCode tdc = new TwoDimensionCode();
BufferedImage image = tdc.qRCodeCommon(code,"jpg",size);
//System.out.print(image.getHeight()+"*"+image.getWidth());
image.flush();
ImageIO.write(image, "jpg", response.getOutputStream());
}
}
4、web.xml里配置servlet
5、jsp上调用:
二维条码:
你只能淘宝一个了
搜搜Zxing