利用Java生成二维码

转自: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



//QRCode生成二维码
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版本







  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值