Qrcode生成二维码的参数总结 及最小尺寸的测试
Qrcode生成二维码,做过很多实验,探索最小规格的二维码到底是多少尺寸,和最高规格的二维码到底是多大尺寸。现在我总结总结:
有两种思路:
1.生成规格高的二维码,然后压缩到自己想要的尺寸的二维码。这种:压缩算法不好的时候会很坑爹。
2.根据调整的参数生成原图,这种图是比较清晰的,打印出来都可以很好的被识别。
先说说第二种吧:根据测试,
1.不设置任何东西时:根据测试
最小的二维码尺寸是45——47:宽高(对于1---14个字符),
第二梯度:54-56:宽高(对于15--26字符)
第三梯度:61-63:宽高(对于27-43字符)
第四题都:。。。。。。。。。。。。。。。。。。
当我设置:setQrcodeVersion(0); 生成的二维码尺寸随存储内容的变化而变化, 不会出现字符串越界的错误。
根据测试:
第一梯度:
1.设置最低排错率L,mode为A时:45-47:宽高(1-25个字符)
2.设置排错率M时,mode为A时,只能存20位(纯数字);
3.设置最低拍错率L,mode为B,时:45-47:宽高(1-17个字符)
如果想存储英文字符,绝对不能使用mode为A,必须使用mode为B
结论mode越大,字符串存储越小,排错率越大,存储字符越少
第二梯度:
最优条件下 26------47个字符占用大小是53-55的宽高;
对于常用的32位字符来说:最优配置是mode=A,排错率=M;占用53---55宽高,既能存储32位字符,又能是排错率更高,且尺寸是最极限。
第三梯度:
尺寸为62--64:最优配置能存储1-78位字符串。
当设置为1时:setQrcodeVersion(1); 如果超过所能存储的长度,将会报错,生成空白图片。
在最优情况下:45---47尺寸能存25个字符,但是如果将排错率改到最高H,那么只能存10位
注意的一点:控制生成的二维码大小跟 gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); 有关系;代表三厘米的二维码,2代表2厘米的二维码,1代表1厘米的二维码。
总之:总结来说:
1.如果需要存储英文的,那么必须设置setQrcodeEncodeMode('B');
2.然后setQrcodeVersion(1);越大,那么生成的码存储信息越多,码越乱。
3.然后可以设置gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);来控制生成二维码的大小。 (只能控制大致范围(最主要的控制),生成的大小还与设置setQrcodeVersion,setOrcodeEncodeMode,setQrcodeErrorCorrect有关. 根据这几个的关系可以调试出适合的二维码。
4.如果啥都不设置的话,那么同等情况下生成的二维码尺寸会比设置为0时更大。
设置的代码:
public class BuilOr {
private static BufferedImage qRCodeCommon(String content, String imgType, int size) {
BufferedImage bufImg = null;
size =10;
try {
Qrcode qrcodeHandler = new Qrcode();
// // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("utf-8");
int imgSize =178;
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量,不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 500) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 2 + pixoff, i * 2 + pixoff, 2, 2);
}
}
}
} else {
throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
}
gs.dispose();
bufImg.flush();
} catch (Exception e) {
e.printStackTrace();
}
return bufImg;
}
转载于:http://m.blog.csdn.net/article/details?id=53511610
Qrcode生成二维码的参数总结 及最小尺寸的测试的更多相关文章
- 如何利用ThoughtWorks.QRCode 生成二维码
1.引用ThoughtWorks.QRCode.dll 在nuget上查找即可引用,也可自行下载 2.生成二维码静态方法 参数: 二维码内容:fileUrl 二维码图片名:typeName #regi ...
- C# 利用QRCode生成二维码图片
网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了 ...
- qrcode 生成二维码
qrcode 生成二维码 Demo: https://www.hgnulb.cn/freedom/qrcode/qrcode.html qrcodeGithub 地址: https://github. ...
- 使用jquery.qrcode生成二维码及常见问题解决方案
转载文章 使用jquery.qrcode生成二维码及常见问题解决方案 一.jquery.qrcode.js介 jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery ...
- C#Qrcode生成二维码支持中文,带图片,带文字
C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...
- python_使用qrcode生成二维码
1.功能 使用qrcode生成二维码 2.代码 #生成二维码: import qrcode #根据url生成二维码 def qrcodeWithUrl(url): img = qrcode.make( ...
- 使用jquery.qrcode生成二维码实现微信分享功能
前言: 最近有个这样的需求,在pc端的商品详情页增加分享功能. 微博分享.QQ好友分享.QQ空间分享这些都很常见.但是微信分享我还没有手动写过(以前改过). 最终效果如下图: 解决方案:使用jquer ...
- QRCode生成二维码,jq QRCode生成二维码,QRCode生成电子名片
[QRCode官网]http://phpqrcode.sourceforge.net/ PHP QRCode生成二维码 官网下载QRCode源码包,引入源码包中的 qrlib.php . <?p ...
- thinkphp3.2集成QRcode生成二维码
一.下载QRcode源代码 https://sourceforge.net/projects/phpqrcode/files/releases/ 使用phpqrcode必须开启GD2扩展,phpqrc ...
随机推荐
- Sqlserver数据库还原一直显示“正在还原…”解决方法
--恢复并且回到可访问状态,要执行 RESTORE database 数据库名 with recovery
- Mac上编译OpenJDK过程记录
编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型.机子具体环境的不同,很难有资料能够一步到位.还是得碰到具体问题通过上网查来一个个解决. 下载OpenJDK ...
- CSS中如何选择ul下li的奇数、偶数行
<style> #Ulist li:nth-of-type(odd){ margin-left: 20px;}奇数行 #Ulist li:nth-of-type(even){margin- ...
- MetaMask/provider-engine-1
https://github.com/MetaMask/provider-engine 在学习这个之前应该先看一下什么是zero-client,MetaMask/zero-client Web3 Pr ...
- android中如何获取指定目录下的图片
需要对指定目录的图片文件进行列表,借鉴了网上的方法,发现列表出来是所有的文件,这样用起来很不方便,在这里也没找到解决的办法,经过自己的进一步研究终于搞定,发上来给有用的同学.用下面这种方式能实现查询实 ...
- OpenCV——图像的载入、显示、输出到文件和滑动条、鼠标操作
图像的载入.显示.输出到文件和滑动条 滑动条 示例: 鼠标操作
- ASP.NET Response 下载文件
private void DownLoad(string fileName, string path) { FileInfo fi = new FileInfo(path); if (fi.Exist ...
- less初识
一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以 ...
- 20155229《网络对抗技术》Exp6:信息收集与漏洞扫描
实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 (4)漏洞扫描:会扫,会看报告,会查漏洞说明,会修补 ...
- LCA的一些算法
LCA,就是求树上任意两点的最近公共祖先 (本题图片与代码均为Luogu3379) 方法我好像讲过一个,这次把主要的三个一起讲一讲 <1> 倍增(O(n log n)) 我们先考虑最基本的 ...