自己在网上看视频学习了下如何使用java创建二维码,感觉还是挺有趣的,有小心思的还可以把秘密存入二维码中噢

视频源网址:http://www.imooc.com/learn/531

点击下载jar包

二维码的类别

二维码依据码制的编码原理,通常分为三种:

线性堆叠式二维码、矩阵式二维码、邮政码。

  1. 线性堆叠式二维码:建立在一维条码基础上,按需要堆积成两行或多行。与一维码很类似。
  2. 矩阵式二维码:(最常用)在一个矩阵空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其它形状)的出现表示二进制“1”,点的不出现表示二进制的“0”。QR CODE
  3. 邮政码:通过不同长度的条进行编码,主要用于邮件编码。

二维码详解:

优缺点

二维码优点:

 (1)高密度编码,信息容量大;
 (2)编码范围广;
  (3)容错能力强;
  (4)编码可靠性高;
 (5)可引入加密措施;
    (6)成本低,易制作,持久耐用。

二维码缺点:

  (1)二维码技术成为手机病毒、钓鱼网站传播的新渠道;
 (2)信息泄露。

三大国际标准

  1. PDF417:不支持中文
  2. DM:专利未公开,需支付专利费
  3. QRCode:专利公开,支持中文
因为QRCode支持中文,免费。读取速度快,数据密度大,占用空间小的优势。本次只介绍怎么生成QRCode二维码
纠错等级:

L级:7%   

M级:15%  

Q级:25%  

H级:30%

JSP生成二维码的方法: --jar包在页头

  ①借助第三方jar,如zxing和qrcodejar
    ②JavaScript,如jquery.qrcode.js

1.zxing方式

/*** 使用zxing创建QrCode格式二维码 * @param content 二维码的内容* @param fullPath 完整的资源存储路径*/public static void createQrCode(String content, String fullPath) {//定义宽高和图片格式和二维码内容int width = 300;int height = 300;String format = "png";/*String content = "";*///定义文件路径/*Path filePath = new File("E:/JavaExcelTest/QrCode02.png").toPath();*/Path filePath = new File(fullPath).toPath();//定义二维码参数:编码格式HashMap config = new HashMap();config.put(EncodeHintType.CHARACTER_SET, "UTF-8");//二维码的纠错等级:L,M,Q,H.从低到高,纠错等级越高,所存储的数据就越少config.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//二维码的空白间隔值,默认为5config.put(EncodeHintType.MARGIN, 2);MultiFormatWriter mfw = new MultiFormatWriter();try {//BarcodeFormat.QR_CODE是一种二维码的格式BitMatrix bm = mfw.encode(content, BarcodeFormat.QR_CODE, width, height, config);//写入资源MatrixToImageWriter.writeToPath(bm, format, filePath);} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("写入完毕!");}/*** 使用zxings解析QrCode格式二维码* @param fullPath 完整的资源存储路劲*/public static void readQrCode(String fullPath) {try {MultiFormatReader multiFormatReader = new MultiFormatReader();File file = new File(fullPath);//读取资源转为图片BufferedImage image = ImageIO.read(file);BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));//解析为result对象Result result = multiFormatReader.decode(binaryBitmap);System.out.println("二维码数据: " + result.toString());System.out.println("二维码编码格式: " + result.getBarcodeFormat());System.out.println("二维码内容: " + result.getText());} catch (NotFoundException e) {System.out.println("文件未找到!");} catch (IOException e) {e.printStackTrace();}}

2.QRCode

/*** 通过QRCode创建QrCode* @param content 二维码的文本内容* @param fullPath 二维码的存储路径*/public static void createQrCode(String content, String fullPath) {Qrcode qrCode = new Qrcode();qrCode.setQrcodeErrorCorrect('M');//纠错等级qrCode.setQrcodeVersion('7');//版本号1-40qrCode.setQrcodeEncodeMode('B');//'N'是数字,'A'是a-Z,'B'是其他字符//宽高公式:width=67+12*(版本号-1)int width = 67 + 12 * (7 - 1);int height = 67 + 12 * (7 - 1);BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D grap = bufferedImage.createGraphics();//设置背景grap.setBackground(Color.white);//设置画笔颜色grap.setColor(Color.black);//清除画板grap.clearRect(0, 0, width, height);//偏移量,防止解析发生异常int pixoff = 2;try {//字节转换byte[] contentByte = content.getBytes("UTF-8");if (contentByte.length > 0 && contentByte.length < 120) {boolean[][] s = qrCode.calQrcode(contentByte);for (int i = 0; i < s.length; i++) {for (int j = 0; j < s.length; j++) {if (s[j][i]) {grap.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}}grap.dispose();bufferedImage.flush();ImageIO.write(bufferedImage, "png", new File(fullPath));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("写入成功");}/*** 通过QRCode解析QRCode* @param fullPath 二维码的存储路径*/public static void readQrCode(String fullPath) {File file = new File(fullPath);try {BufferedImage bufferedImage = ImageIO.read(file);//创建QRCode解析实例QRCodeDecoder qrCode = new QRCodeDecoder();/** 解析* qrCode.decode(QrCodeImage qrCodeImage)* qrCodeImage是一个接口,无法实例化,需自定义类并实现QRCodeImage接口*/String result = new String(qrCode.decode(new MyQrCodeImage(bufferedImage)), "UTF-8");System.out.println(result);} catch (IOException e) {e.printStackTrace();}}

QRCodeImage实现类:

package com.qrCode;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;public class MyQrCodeImage implements QRCodeImage {BufferedImage bufferedImage;public MyQrCodeImage(BufferedImage bufferedImage) {this.bufferedImage = bufferedImage;}@Overridepublic int getHeight() {return this.bufferedImage.getHeight();}//获取像素@Overridepublic int getPixel(int x, int y) {return this.bufferedImage.getRGB(x, y);}@Overridepublic int getWidth() {return this.bufferedImage.getWidth();}}

3.jQuery方式:最简单,但支持功能太少,不支持中文

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ page import="com.entity.User" %>
<!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=UTF-8">
<title>Login</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.qrcode.min.js"></script>
<style type="text/css">
body{
background-color: #fff;
}
.main{
width:500px;
height:200px;
margin: auto auto;
text-align: center;
}
</style>
</head>
<body>
<div class="qrcode"></div>
</body>
<script type="text/javascript">
$(function(){$(".qrcode").qrcode("阿拉蕾 "); })</script>
</html>

java创建QRCode二维码的三种方式相关推荐

  1. 生成二维码的三种方式

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

  2. 解析二维码的三种方式

    效果预览 方式一jsqr // jsQR识别var fileJsqrId = document.getElementById('upload-jsqr');fileJsqrId.addEventLis ...

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

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

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

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

  5. 微信小程序生成二维码的两种方式

    微信小程序生成二维码的两种方式 2020/11/10 第一种,利用网络api自动生成 <image class="xin-erma" src="{{'https:/ ...

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

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

  7. 实现二维码-完整三种编码流程加代码解析(javascript)

    效果 输入内容:XXXwedewed生日//&sss乐❤XXXwedewed生日//&sss乐❤ 完整的演示效果为,输入内容后会将解码绘制的每一步都展示(有点长就不全截图了,可以直接移 ...

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

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

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

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

最新文章

  1. linux系统做bond
  2. java面试(2)--大数据相关
  3. Gentoo 安装日记 13 (配置内核 :可执行文件安格式和网络)
  4. Hadoop最常用的工具(SQL on Hadoop):Hive
  5. 减负提质的新命题下,网易云信如何为课后服务升级?
  6. exp-imp实现oracle不同表空间的迁移
  7. Linux环境下Android开发环境的搭建
  8. vue的props实现父组件变化子组件一起变化
  9. Android启动initlogo.rle制作
  10. Android板实现双屏显示,DisplayManager和Display的使用
  11. oracle与db2 市场占有率,oracle 与 DB2 的区别
  12. 在html中标题字号一共有几种,HTML中常用的几种标签
  13. Logistic Regression逻辑回归的损失函数与梯度下降训练
  14. python while true循环_python学习——while True的用法
  15. 关于互联网金融的安全、监管
  16. 记英语单词中第一个易混淆的单词组attain achieve acquire
  17. 目的路径太长如哈删除_文件名超长导致文件无法删除怎么办?
  18. ANE for Android Setp by Step
  19. (附源码)ssm南工二手书交易平台 毕业设计172334
  20. java picked up,抑制“Picked up _JAVA_OPTIONS”信息

热门文章

  1. Toad for Oracle 使用文档
  2. Android平台的信息推送实现
  3. python足球联赛赛程_用Python生成分类的足球联赛表
  4. linux 七层防火墙,iptables防火墙实现七层过滤对应用层的过滤
  5. A3988/HR3988(四路DMOS全桥电机驱动芯片)
  6. PHP 生成下载地址例如迅雷下载
  7. 【git】撤销远端合并到master分支
  8. 点聚weboffice在ie,firefox,chrome下的区别
  9. 电台转型与计算机相关的问题,计算机技术在电视台中的应用黄文峰
  10. Python之面向对象和面向过程