1.写这个博客的目的

解决JAVA生成二维码(一)中的一些问题。

2.解读排错率,编码模式,版本问题.以下都是自己测试中存在的问题

1.排错率
排错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片,二维码内容还是可以被全部读到。
设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小,即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力。排错率越高,则二维码图片能被遮挡的部分越多。

2.编码模式
编码模式:Numeric(N-数字):Binary(B-二进制):Alphanumeric(A-英文字母)
不同的内容使用对应的编码格式

3.版本问题(1-40)
即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。

问题一:排错率选太高导致内容过长,二维码生成失败
如运行如下代码:

package com.wangcong;import com.swetake.util.Qrcode;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;public class two {public static void main(String[] args) {String imgPath = "E:/code.png";         // 二维码保存路径// 跳转的内容,如果http://则当做文字处理String content = "好好学习,天天向上,努力敲代码学JAVA";// 创建封装类QrCodeAssis assis = new QrCodeAssis(imgPath, content);boolean result =  assis.createCode(480, 480);if (result) {System.out.println("二维码生成成功!");} else {System.out.println("二维码生成失败!");}}
}/*** 使用QRCode生成二维码*/
class QrCodeAssis{private String imgPath;         // 二维码保存路径private String content;         // 二维码内容/*** imgPath 二维码保存路径, content 二维码内容]*/QrCodeAssis(String imgPath, String content) {this.imgPath = imgPath;this.content = content;}/*** boolean 二维码是否生成成功*/boolean createCode(int width, int height) {boolean flag = true;try {Qrcode qrcode = new Qrcode();           // 创建Qrcode对象// 排错率可选(%)-L(7):M(15):Q(25):H(30)qrcode.setQrcodeErrorCorrect('Q');// 编码模式-Numeric(N-数字):Binary(B-二进制):Alphanumeric(A-英文字母)qrcode.setQrcodeEncodeMode('B');qrcode.setQrcodeVersion(3);             // 设置版本(可选)width = width >= 100 ? width : 100;     // 宽度至少100height = height >= 100 ? height: 100;   // 高度至少100// 创建画布和画图设备BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics2D draw = img.createGraphics();draw.setBackground(Color.WHITE);        // 设置背景色draw.clearRect(0, 0, width, height);    // 清空原始内容draw.setColor(Color.BLACK);             // 设置前景色int posOff = 2;     // 设置偏移量,避免输出点重叠// 设置内容编码byte[] codeContent = this.content.getBytes("utf-8");// 生成二维数组,500是内容大小,根据自己的内容大小进行设定if (codeContent.length > 0 && codeContent.length < 600) {boolean[][] qrcodeOut = qrcode.calQrcode(codeContent);// 将内容写入到图片中for (int i = 0; i < qrcodeOut.length; i++) {for (int j = 0; j < qrcodeOut.length; j++) {// 如果当前位置有像素点if (qrcodeOut[j][i]){// 写入图片draw.fillRect(j * 16 + posOff, i * 16 + posOff, 16, 16);}}}}draw.dispose();                                // 关闭画图设备img.flush();                                   // 刷新缓冲区File file = new File(imgPath);ImageIO.write(img, "png", file);    // 保存图片} catch (Exception e) {e.printStackTrace();flag = false;}return flag;}
}

运行结果如下;

解决方案:可适当将版本调大,(类似与扩大二维码容器,让二维码能存放更多的内容)
问题二:将版本调大之后,导致生成的二维码不全,扫描没反应(问题一的一个并发问题)问题一生成的二维码如下图:

扫描二维码不会有反应
解决方案:认真解读代码会发现提供的createCode方法有两个参数,分别代表的是图片的画布BufferedImage的宽和高只需要适当调整一下代码boolean result = assis.createCode(480, 480);内的2个参数即可:如下代码:

package com.wangcong;import com.swetake.util.Qrcode;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;public class two {public static void main(String[] args) {String imgPath = "E:/code.png";         // 二维码保存路径// 跳转的内容,如果http://则当做文字处理String content = "好好学习,天天向上,努力敲代码学JAVA";// 创建封装类QrCodeAssis assis = new QrCodeAssis(imgPath, content);boolean result =  assis.createCode(700, 700);if (result) {System.out.println("二维码生成成功!");} else {System.out.println("二维码生成失败!");}}
}/*** 使用QRCode生成二维码*/
class QrCodeAssis{private String imgPath;         // 二维码保存路径private String content;         // 二维码内容/*** imgPath 二维码保存路径, content 二维码内容]*/QrCodeAssis(String imgPath, String content) {this.imgPath = imgPath;this.content = content;}/*** boolean 二维码是否生成成功*/boolean createCode(int width, int height) {boolean flag = true;try {Qrcode qrcode = new Qrcode();           // 创建Qrcode对象// 排错率可选(%)-L(7):M(15):Q(25):H(30)qrcode.setQrcodeErrorCorrect('Q');// 编码模式-Numeric(N-数字):Binary(B-二进制):KanJi(K-汉字):Alphanumeric(A-英文字母)qrcode.setQrcodeEncodeMode('B');qrcode.setQrcodeVersion(5);             // 设置版本(可选)width = width >= 100 ? width : 100;     // 宽度至少100height = height >= 100 ? height: 100;   // 高度至少100// 创建画布和画图设备BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics2D draw = img.createGraphics();draw.setBackground(Color.WHITE);        // 设置背景色draw.clearRect(0, 0, width, height);    // 清空原始内容draw.setColor(Color.BLACK);             // 设置前景色int posOff = 2;     // 设置偏移量,避免输出点重叠// 设置内容编码byte[] codeContent = this.content.getBytes("utf-8");// 生成二维数组,500是内容大小,根据自己的内容大小进行设定if (codeContent.length > 0 && codeContent.length < 600) {boolean[][] qrcodeOut = qrcode.calQrcode(codeContent);// 将内容写入到图片中for (int i = 0; i < qrcodeOut.length; i++) {for (int j = 0; j < qrcodeOut.length; j++) {// 如果当前位置有像素点if (qrcodeOut[j][i]){// 写入图片draw.fillRect(j * 16 + posOff, i * 16 + posOff, 16, 16);}}}}draw.dispose();                                // 关闭画图设备img.flush();                                   // 刷新缓冲区File file = new File(imgPath);ImageIO.write(img, "png", file);    // 保存图片} catch (Exception e) {e.printStackTrace();flag = false;}return flag;}
}

生成的二维码如下图:

扫描结果如下图:

问题三:编码模式选择错误:导致生成的二维码扫描没结果(生成了一个本人博客的网址却不能扫描)例如如下代码:

package com.wangcong;import com.swetake.util.Qrcode;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;public class two {public static void main(String[] args) {String imgPath = "E:/code.png";         // 二维码保存路径// 跳转的内容,如果http://则当做文字处理String content = "https://blog.csdn.net/weixin_44255950";// 创建封装类QrCodeAssis assis = new QrCodeAssis(imgPath, content);boolean result =  assis.createCode(480,480);if (result) {System.out.println("二维码生成成功!");} else {System.out.println("二维码生成失败!");}}
}/*** 使用QRCode生成二维码*/
class QrCodeAssis{private String imgPath;         // 二维码保存路径private String content;         // 二维码内容/*** imgPath 二维码保存路径, content 二维码内容]*/QrCodeAssis(String imgPath, String content) {this.imgPath = imgPath;this.content = content;}/*** boolean 二维码是否生成成功*/boolean createCode(int width, int height) {boolean flag = true;try {Qrcode qrcode = new Qrcode();           // 创建Qrcode对象// 排错率可选(%)-L(7):M(15):Q(25):H(30)qrcode.setQrcodeErrorCorrect('L');// 编码模式-Numeric(N-数字):Binary(B-二进制):KanJi(K-汉字):Alphanumeric(A-英文字母)qrcode.setQrcodeEncodeMode('N');qrcode.setQrcodeVersion(3);             // 设置版本(可选)width = width >= 100 ? width : 100;     // 宽度至少100height = height >= 100 ? height: 100;   // 高度至少100// 创建画布和画图设备BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics2D draw = img.createGraphics();draw.setBackground(Color.WHITE);        // 设置背景色draw.clearRect(0, 0, width, height);    // 清空原始内容draw.setColor(Color.BLACK);             // 设置前景色int posOff = 2;     // 设置偏移量,避免输出点重叠// 设置内容编码byte[] codeContent = this.content.getBytes("utf-8");// 生成二维数组,500是内容大小,根据自己的内容大小进行设定if (codeContent.length > 0 && codeContent.length < 600) {boolean[][] qrcodeOut = qrcode.calQrcode(codeContent);// 将内容写入到图片中for (int i = 0; i < qrcodeOut.length; i++) {for (int j = 0; j < qrcodeOut.length; j++) {// 如果当前位置有像素点if (qrcodeOut[j][i]){// 写入图片draw.fillRect(j * 16 + posOff, i * 16 + posOff, 16, 16);}}}}draw.dispose();                                // 关闭画图设备img.flush();                                   // 刷新缓冲区File file = new File(imgPath);ImageIO.write(img, "png", file);    // 保存图片} catch (Exception e) {e.printStackTrace();flag = false;}return flag;}
}

生成的二维码如下图:

内容存放的是本人的博客网址,但是扫描没有结果:
解决方案:讲编码模式改成B
生成的二维码如下图:

扫描结果为:

最后,通过本人个人博客可以看到本人粉丝不多,喜欢的人也不多,求一波粉丝,求一波喜欢,本人也会经常发博客

JAVA生成二维码(二)深度处理相关推荐

  1. 分享6:绘制二维码/二维条码(java版)

    最近客户抽筋了,不想要我们现有的二维码,转而采用二维条码.(这之前二维码也不是我做的)既然是甲方bb提出的,老板又安排到到我手上了,那么我就得心(一)甘(脸)情(苦)愿(逼)的默默解决呗. 二维码/二 ...

  2. PHP批量生成底部带编号二维码(二维码生成+文字生成图片+图片拼接合并)

    PHP批量生成带底部编号二维码(二维码生成+文字生成图片+图片拼接合并) 需求: 输入编号如 : cb05-0000001  至 cb05-0000500 批量生成 以编号为名称的下图二维码,然后压缩 ...

  3. python之有趣的二维码-----二维码表白记

    " 如何使用二维码进行表白-一键制作二维码" 二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下----嘿嘿嘿--不行, ...

  4. vue 在线生成二维码 二维码生成背景下载

    安装 引用 3.注入 app.vue 这里只是生成二维码 生成二维码 js 这里是需要二维码 并且与另一张合成一张image的! 上代码

  5. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)...

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  6. 灵猫二维码 - 二维码中间加图片的方法

    正常生成的二维码都是不带图标的,但是很多时候我们都需要在二维码中间添加上我们自己的图标,这个时候我们就可以使用灵猫二维码来进行操作了! 使用教程: 1.打开灵猫二维码:http://lmewm.mai ...

  7. java 生成二维码 QRCode、zxing 两种方式

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  8. Java(Spring boot)实现生成二维码

    文章目录 一.引入spring boot依赖: 二.工具类代码: 三.调用工具类生成二维码 1.将链接生成二维码图片并保存到指定路径 2.将链接生成二维码直接显示在页面 3.将以get请求传参链接生成 ...

  9. 【java实现二维码的生成(源码)】

    目录 [复制即用]实现通过扫描生成的二维码跳转到指定网页,也可实现扫描二维码显示文本或图片 1.0.导入依赖坐标 1.1.工具类 1.2.入参类 1.3.controller层 1.4.service ...

  10. Java生成二维码并把图片流导出压缩包下载(亲测可用)

    目录 背景 Maven依赖相关 二维码生成 基础实体类 二维码工具类 控制层代码 结果展示 单个二维码 二维码压缩包 源码地址 背景: 实际开发中有不少二维码生成并下载的需求,单个和批量下载都比较常见 ...

最新文章

  1. 在jsp中点击按钮,在bean中把已经查出的数据,生成csv文件,然后在ie中自动打开
  2. Ecol. Lett.:写给实践生态学家的β多样性分析指南 | 朝花夕拾
  3. Android异步处理二:AsynTask介绍和使用AsyncTask异步更新UI界面
  4. 分享一套开源微信后台开发源码,简单配置就能使用(附源码)!
  5. 79年后,中国人口将不到10亿,我国的生育率为何上不去了?
  6. 在下载jar包时,要有三个包,分别为使用的把class、查看文档的api、查看源代码的资源包...
  7. 邮政管理部门发话:未获用户同意投放快递柜属违法行为
  8. 【Flink】Flink 1.13 将数据 写入 到 elasticsearch 7 案例
  9. linux巡检脚本生成word,Linux 编写安全巡检脚本
  10. [转载] python多重继承初始化_关于python多重继承初始化问题
  11. 【Shiro第七篇】SpringBoot + Shiro实现会话管理
  12. linux oracle ora-00257,Oracle数据库的ORA-00257故障解决过程
  13. 自制Qt周立功测试上位机
  14. 二阶无源低通滤波器幅频特性曲线_二阶无源滤波器
  15. LoRa网关与服务器通信——PROTOCOL
  16. 计算机英语翻译的典故,中国成语故事英文版带翻译【六篇】
  17. 微云直链解析php,用微云做直链
  18. swal()弹出删除确认框
  19. v-model的基本使用
  20. 索尼T700完全用机指南【转自太平洋电脑网】

热门文章

  1. 沐神-动手学深度学习-引言
  2. 电子现金 圈存、补登
  3. NYIST_ACM Ranking List FAQ
  4. 会抓老鼠的猫不一定是好猫
  5. Speedoffice(PPT)如何做动画演示效果
  6. 手机蓝牙连接小票机/打印机,输入PIN码后确定键不亮的解决办法
  7. 基于MATLAB车牌图像识别的设计与实现
  8. JavaScript 高级(进阶)
  9. ajax 源生代码,ajax 源生,jquery封装 例子 相同哈哈
  10. 怎样用matlab建立igbt的仿真分析模型,基于MATLAB/Simulink的IGBT导通模型研究