一:二维码的概念
二维条码(2-dimemsional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的图形

二: 二维码的分类
通常分为三种类型:
1.0 线性堆叠式二维码
编码原理:建立在一维条码基础之上,按需要堆积成两行或者多行
2.0 矩阵式二维码
在一个矩阵空间通过黑白像素在矩阵中的不同分布进行编码,用点表示二进制的1,空白表示二进制的0
3.0 邮政码
通过不同长度的条进行编码,主要用于邮政编码,如POSTNET、BPO4-STATE

三: 二维码的优缺点
1.0 高密度编码,信息容量大
2.0 编码范围广
3.0 容错能力强
4.0 译码可靠性高
5.0 可引入加密措施
6.0 成本低,易制作,持久耐用

缺点:二维码成为手机病毒,钓鱼网站传播的新渠道、信息泄露

四:QR Code
1.0 目前流行的三大国际标准
PDF417 : 不支持中文
DM : 专利未公开,需支付专利费用
QR Code : 专利公开,支持中文
2.0 两种生成方式
01 : 借助第三方的jar包,如zxing和qrcodejar
02 : javascript,如jQuery.qrcode.js

五 :实例讲解
1.0: zxing (http://github.com/zxing/)
1.1 : 进入该链接下载源码,新建java项目,导入core、javase包中的com文件,export为jar文件
1.2: public class CreatQRCode {

public static void main(String[] args) {

int width = 300;
int height = 300;
String formart = "png";
String content = "www.gongzifusu.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);
Path file = new File("C:/Users/Administrator/Desktop/QRCode/img.png").toPath();
MatrixToImageWriter.writeToPath(bitMatrix, formart, file);

} catch (Exception e) {

e.printStackTrace();

}

}

}
1.3: 解析二维码
public static void main(String[] args) {

try {
MultiFormatReader multiFormatReader = new MultiFormatReader();
File file = new File("C:/Users/Administrator/Desktop/QRCode/img.png");
BufferedImage bufferedImage = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));

//定义二维码的参数
HashMap hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); //编码格式

Result result = multiFormatReader.decode(binaryBitmap,hints);
System.out.println("解析结果: "+result.toString());
System.out.println("二维码格式: "+result.getBarcodeFormat());
System.out.println("二维码文本内容: "+result.getText());
} catch (Exception e) {
e.printStackTrace();
}
}

2.0 QRCode方式生成二维码(http://www.swetake.com/qrcode/index-e.html)/(https://osdn.jp/projects/qrcode/)
2.1 :下载相关源码文件,创建java项目,导入jar包,
2.2 : 生成二维码
public class CreateQRCodeByQC {

public static void main(String[] args) throws Exception{

Qrcode x = new Qrcode();
x.setQrcodeEncodeMode('M'); //纠错等级
x.setQrcodeEncodeMode('B'); //N代表数字,A代表a_Z,B代表其他符号
x.setQrcodeVersion(7); //版本
String qrDate = "天降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,增益其所不能,所以动心忍性...";

int width = 67 + 12 * (x.getQrcodeVersion()-1);
int height = 67 + 12 * (x.getQrcodeVersion()-1);
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);

Graphics2D gs = bufferedImage.createGraphics();

gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
gs.clearRect(0, 0, width, height);

int pixoff = 2 ; //偏移量

byte[] d = qrDate.getBytes("gb2312");
if (d.length>0 && d.length <120) {
boolean [][]s = x.calQrcode(d);
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("C:/Users/Administrator/Desktop/QRCode/qrcode.png"));

}

}
2.3 解析二维码
public class ReadQRCodeByQR {

public static void main(String[] args) throws Exception{

File file = new File("C:/Users/Administrator/Desktop/QRCode/qrcode.png");

BufferedImage bufferedImage = ImageIO.read(file);
QRCodeDecoder qrCodeDecoder = new QRCodeDecoder();
String result = new String(qrCodeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312");

System.out.println(result);

}

}

public class MyQRCodeImage implements QRCodeImage{

BufferedImage bufferedImage;

public MyQRCodeImage(BufferedImage bufferedImage) {
super();
this.bufferedImage = bufferedImage;
}

@Override
public int getHeight() {

// TODO Auto-generated method stub
return bufferedImage.getHeight();
}

@Override
public int getPixel(int arg0, int arg1) {

// TODO Auto-generated method stub
return bufferedImage.getRGB(arg0, arg1);
}

@Override
public int getWidth() {

// TODO Auto-generated method stub
return bufferedImage.getWidth();
}

}

3.0 jQuery-qrcode(https://github.com/jeromeetienne/jquery-qrcode)
3.1 新建web项目,导入jquery.min.js、jquery.qrcode.min.js
3.2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>页面生成二维码</title>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.qrcode.min.js"></script>
</head>
<body>
生成二维码如下:<br>
<div id="qrcode"></div>

<script type="text/javascript">
jQuery('#qrcode').qrcode("www.STK.com");
</script>
</body>
</html>

转载于:https://www.cnblogs.com/juniorjava/p/7760886.html

生成二维码的三种方式相关推荐

  1. PHP开发日志 ━━ php、javascript生成二维码的三种方法

    最简单最实例的goolge开源方法 推荐手册:php完全自学手册 1.google开放api 代码如下: $urlToEncode="http://www.helloweba.com&quo ...

  2. Vue中生成二维码的一种方式—vue-qr

    Vue中生成二维码的一种方式-vue-qr vue实现二维码生成(vue + vue-qr)

  3. 在web页面上快速生成二维码的三种实用方法

    转载自:在web页面上快速生成二维码的三种实用方法 二维码是桌面和移动端快速分享的高效手段之一,这里介绍两个不错的快速开发二维码的方法,和大家分享一下~~ 方法1:使用极客标签提供的二维码快速生成服务 ...

  4. java创建QRCode二维码的三种方式

    自己在网上看视频学习了下如何使用java创建二维码,感觉还是挺有趣的,有小心思的还可以把秘密存入二维码中噢 视频源网址:http://www.imooc.com/learn/531 点击下载jar包 ...

  5. 利用jquery的qrcode.js插件生成二维码的两种方式的使用

    2019独角兽企业重金招聘Python工程师标准>>> 利用jquery的qrcode.js插件生成二维码的额两种方式,canvas(即画布)方式和table方式(原文地址http: ...

  6. 利用VUE生成二维码(两种方式)

    利用Vue生成二维码 Author:kak vue有两种生成二维码的方式,qrcode.vue-qr(有icon): 1.qrcode npm ``install` `--save qrcodejs2 ...

  7. 程序猿生成二维码的三种方法(在线接口+在线网站+本地程序)

    一.前言 程序猿经常在web.app.小程序等应用生成二维码,生成二维码方式有多种,如果你第一次接触,网上搜出来的基本是使用本地程序生成的,其实这种最麻烦,有更好的方式,就是使用在线接口的,简单方便快 ...

  8. 关于利用qrcode生成二维码的两种方式的区别

    首先以下内容是查找网上资料后了解的利用qrcode.js生成二维码的额两种方式,canvas(即画布)方式和table方式(原文地址http://www.helloweba.com/view-blog ...

  9. php生成二维码的三种方法

    最简单最实例的goolge开源方法 1.google开放api 代码如下: $urlToEncode="http://www.helloweba.com"; generateQRf ...

最新文章

  1. ipfs浏览器java实现_IPFS + Ethereum(上篇):JS+IPFS-API存储和获取数据
  2. tensor torch 构造_TORCH.TENSOR
  3. 实现和调用API接口
  4. react-router 从 v2/v3 to v4 迁移(翻译)
  5. 35岁的程序员正在消失?No,我认识了一个50岁的程序员!
  6. Zookeeper的安装部署,zookeeper参数配置说明,集群搭建,查看集群状态
  7. linux 查看系统函数库,教你在Linux操作系统中如何创建函数库
  8. 西门子触摸屏脚本程序_通过驿唐PLC501远程下载Smart Line触摸屏
  9. 前端学习(2251)提交代码
  10. ROS学习笔记3(创建一个ROS Package)
  11. 理解数据类型与数学运算:摄氏温度与华氏温度的相互转换
  12. 小程序商城源码,很不错,推荐给开发者
  13. 【线性代数】向量组的线性相关性公式定理速查
  14. APK安装流程:点击下载应用了解安装的全过程
  15. 【Structure Light】reading notes(一)
  16. 智能手机屏幕材质那点事
  17. mysql写了代码如何看表_mysql之单表查询__我自己敲的代码
  18. servlet+javabean+jdbc+mysql基于MVC模式的课件管理系统,有三个表的增删改查和课件搜索、课件上传、课件下载功能, 具体功能请看界面上的导航条
  19. 计算机图形学(三)——画一个矩形
  20. 使用for语句时的注意事项

热门文章

  1. Python爬取链家的数据并绘制热力图
  2. 数据中台建设方案-基于大数据平台(下)
  3. 服务器该不该选SSD硬盘储存?
  4. out of synch
  5. SQLserver基础--语句、存储过程(七)
  6. 巴比特 | 元宇宙每日必读:广州南沙发布“元宇宙九条”措施,平台最高可获得2亿元资金支持...
  7. no transaction is in progresss
  8. 中国前10名的休闲服品牌企业信息化漫谈--S公司
  9. Linux 中断管理之ARM GIC V3 初始化
  10. 谷歌drive收费_Google Drive的系统设计分析