[二维码生成和解析][Java]

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

首先必须的jar包文件:百度云盘下载

Qrcode.jar Qrcode_Swetake.jar 这两个就是我们的主角

学习之前可以简单了解一下:二维码原理

新建javaPRoject 新建lib文件夹

将jar文件复制进去,选中jar文件右键BuildPath -- Add to BuildPath (旁白:这么简单的操作你都还要讲!)

进入正题:

代码如下: 为方面同学理解 注释较多 请理解 如感不适 请见谅

(旁白:废话太多了 我要看代码!)

生成Qrcode代码:

新建 QrcodeDemo.java

packageqrcode;importjava.awt.Color;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjavax.imageio.ImageIO;importcom.swetake.util.Qrcode;publicclassQrcodeDemo {publicstaticvoidmain(String[] args)throwsUnsupportedEncodingException {

Qrcode qrcode=newQrcode();//二维码包含:数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)//格式信息:表示改二维码的纠错级别,分为L、M、Q、H//错误修正容量//L水平 7%的字码可被修正//M水平 15%的字码可被修正//Q水平 25%的字码可被修正//H水平 30%的字码可被修正//Qrcode有容错能力,Qrcode图形如果有破损,仍然可以被读取内容,最高可以到30%面积破损仍可被读取。//相对而言,容错率愈高,Qrcode图形面积愈大。//所以一般折衷使用15%容错能力 - 'M'qrcode.setQrcodeErrorCorrect('M');//B 以2进制形式 进行信息存储qrcode.setQrcodeEncodeMode('B');//设置Qrcode版本//QR码符号共有40种规格的矩阵(一般为黑白色)//从21x21(版本1),到177x177(版本40)//每一版本符号比前一版本 每边增加4个模块//常用版本为7 如支付宝版本qrcode.setQrcodeVersion(7);//创建图片的存储空间 - 流空间BufferedImage img=newBufferedImage(140,140,BufferedImage.TYPE_INT_RGB);//常量 8位 颜色的图片//画笔工具Graphics2D g=img.createGraphics();

g.setBackground(Color.white);

g.clearRect(0, 0, 140, 140);

g.setColor(Color.black);

File file=newFile("/Users/Summer/Desktop/二维码.png");//数据信息String str="http://www.baidu.com";byte[] data =str.getBytes();//生成的calboolean[][] qrcodeDate=qrcode.calQrcode(data);//设置偏移量 不设置可能导致解析出错intoffset=2;for(inti = 0; i < qrcodeDate.length; i++) {for(intj = 0; j < qrcodeDate.length; j++) {/*必须做判定 判定为true的部分进行打印*/if(qrcodeDate[j][i]){//注意j i的位置 否则可能导致后续无法解析//主意j i的位置 防止绘制错误g.fillRect(j*3+offset,i*3+offset,3,3);/** 以下尺寸合适,二维码居中

* 100*100 (j*2+5,i*2+5,3,3)

* 140*140 (j*3+2,i*3+2,3,3)

* 300*300 (j*6+15,i*6+15,6,6);*/}

}

}//刷新img.flush();//释放资源g.dispose();try{//流写入文件ImageIO.write(img,"png",file);

}catch(IOException e) {

e.printStackTrace();

}

}

}

QrcodeDemo.java

解析Qrcode:

新建 DecodeDemo.java

packageqrcode;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importjp.sourceforge.qrcode.QRCodeDecoder;importjp.sourceforge.qrcode.data.QRCodeImage;publicclassDecodeDemo {publicstaticvoidmain(String[] args) {

BufferedImage img=null;try{//读取到流中..img = ImageIO.read(newFile("/Users/Summer/Desktop/2维码.png"));

}catch(IOException e) {

e.printStackTrace();

}//QRCodeDecoder对象 进行解析操作QRCodeDecoder qrcodeDecoder =newQRCodeDecoder();//读取数据 byte[]//注意该方法参数 需要QRCodeImage对象 自己写对象实现和重写byte[] decodeByte = qrcodeDecoder.decode(newqrcodeImg(img));

String s=newString(decodeByte);

System.out.println(s);

}

}//实现QRCodeImageclassqrcodeImgimplementsQRCodeImage {publicBufferedImage img;publicqrcodeImg(BufferedImage img) {this.img =img;

}

@OverridepublicintgetHeight() {returnimg.getHeight();

}

@OverridepublicintgetPixel(intx,inty) {returnimg.getRGB(x, y);

}

@OverridepublicintgetWidth() {returnimg.getWidth();

}

}

DecodeDemo.java

当然大家也可以提取成工具类 (工具类:方便工作时随意复制粘贴)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航