转自:imooc 慕课网
QR Code
流行的三大国际标准
PDF47:不支持中文
DM:专利未公开,需支付专利费用
QRCode:专利公开,支持中文(Quick Response code)
纠错能力
L级:约可就错7%的数据码字
M:15%
Q:25%
H:30%
就算把二维码花掉一部分,丢失一部分也可以识别。
纠错能力越高,存储的数据越少,清晰度要求越底。
三个方框:位置探测图形
定位,校正,版本信息
增加一个版本,增加4个模块
JSP生成二维码的方法
1:借助第三方的jar,如zxing(谷歌), qrcodejar
2:javascript,如jquery.qrcode.js
zxing:
https://github.com/zxing/
点击release去下载所需的版本
这个是谷歌为安卓写的
java相关的两个目录
core里面是二维码的java文件
javase里面是java类:GUIRunner....
zxing他没有相关的jar包,考到项目中的话,耦合度太高
操作:
1.新建项目
2.把com包考到src下
3.把javase/下的com包也拷贝过来
4.有错无,别管,项目右键导出jar包 java/jar file
5.jar包保存到本地,然后删除这个没意义的项目
试一试:
1.建立新的工程
2.工程下建一个新的文件夹lib,把包导入,build path
3.写代码
//生成二维码
public class CreateQRCode{
public static void main(String[] args){
//指定大小
int width = 300;
int height = 300;
String format = "png";
String content = "www.baidu.com";
//定义二维码的参数
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.M);//纠错等级
hints.put(EncodeHintType.MARGIN,2);
//生成二维码(内容,格式,)
try{
BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE,width,height,hints);
Path file = new file("D:/code/img.png").toPath();
MatrixToImageWriter.writeToPath(bitMatrix,format,file);
}catch(Exception e){
e.printStackTrace();
}
}
}
//解析读取二维码
public class ReadQRCode{
public static void main(String[] args){
try{
MultiFormatReader formatReader = new MultiFormatReader();
File file = nw File("D:/code/img.png");//读取文件
BufferedImage image = ImageIO.read(file);//识别成图片
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
Result result = formatReader.decode(image,hints);
system.out.println("解析结果:"+result.toString());//www.baidu.com
system.out.println("二维码格式类型:"+result.getBarcodeFormat());//QR_CODE
system.out.println("二维码文本内容:"+result.getText());//www.baidu.com
}catch(Exception e){
e.printStackTrace();
}
}
}
//===========================================================
QR_Code
生成:http://www.swetake.com/qrcode/index-e.html
读取:https://osdn.jp/projects/qrcode
分别下载后,把文件夹lib中的两个jar文件拷到项目中,buildpath
创建类生成二维码,可以参考example
public class CreateQRCode{
public static void main(String[] args){
Qrcode x=new Qrcode();//实例化
x.setQrcodeErrorCorrect('M');//纠错等级L.M.H.Q
x.setQrcodeEncodeMode('B');//N代表数字 A代表a-z B代表其他字符(中文)
x.setQrcodeVersion(7);//版本1-40
String qrData = "www.baidu.com";
int width = 67+12*(7-1);//7是版本号
int height = 67+12*(7-1);//这是一个公式,自己随意定义的话会太大,比如300,一张图会有空白页,二维码就在左上角了
//java gui
BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
qs.clearRect(0,0,width,height,);
//偏移量
int pixoff = 2;
//往画板中填充内容
byte[] d =qrData.getText().getBytes("gb2313=2");//gb2312是中文,默认是无参数
if (d.length>0 && d.length <120){//转成字节数,然后填充
boolean[][] s = x.calQrcode(d);//计算QRCode
for (int i=0;i<s.length;i++){
for (int j=0;j<s.length;j++){
if (s[j][i]) {
gs.fillRect(j*3+pixoff, i*3+pixoff, 3, 3);
}
}
}
}
gs.dispose();
bufferedImage.flush();
ImageIO.write(bufferedImage,"png",new File("D:/code/qrcode.png"));
}
}
//解析读取二维码
public class ReadQRCode{
public static void main(String[] args){
try{
MultiFormatReader formatReader = new MultiFormatReader();
File file = nw File("D:/code/qrcode.png");//读取文件
BufferedImage bufferedImage = ImageIO.read(file);//识别成图片
QRCodeDecoder codeDecoder = new QRCodeDecoder();
QRcodeDecoder codeDecoder = new QRcodeDecoder();
String result = new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312");
system.out.println("解析结果:"+result);//www.baidu.com
}catch(Exception e){
e.printStackTrace();
}
}
}
//实现类
public class MyQRCodeImage implements QRCodeImage{
BufferedImage bufferedImage;
public MyQRCodeImage(BufferedImage bufferedImage){
this.bufferedImage = bufferedImage;
}
@Override
public int getHeight(){
return bufferedImage.getHeight();
}
@Override
public int getPixel(int arg0, int arg1){
return bufferedImage.getRGB(arg0,arg1);
}
@Override
public int getWidth(){
return bufferedImage.getWidth();
}
}
//====================
3.jquery-qrcode
https://github.com/jeromeetienne/jquery-qrcode
release去下载
建议使用jquery qrcode.min.js(压缩过的文件)
引入js <div>
1.创建Web工程
2.webContent下创建js文件夹,放入jquery min.js 和 jquery qrcode.min.js 注意顺序
3.创建qrcode.jsp
//========================
LOGO的话,需要photoshop去处理
我们扫描的只是链接“www.baidu.com”, 而不是首页
www.baidu.com ---->改为 http://www.baidu.com
如何实现二维码扫描安装手机软件?
苹果:
https://itunes.apple.com/cn/app/mu-ke-wng/id722179140?mt=8
安卓:
http://www.immoc.com/mobile/appdown
http://www/imooc.com/mobile/mukewang.apk --这种也可以,只是微信不支持
二维码扫描名片
Vcard是标准通信簿基本格式
https://zh.wikipedia.org/wiki/VCard(中文打不开的话,用英文的en.wiki...)
Vcard2.1版本