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生成二维码的参数总结 及最小尺寸的测试的更多相关文章

  1. 如何利用ThoughtWorks.QRCode 生成二维码

    1.引用ThoughtWorks.QRCode.dll 在nuget上查找即可引用,也可自行下载 2.生成二维码静态方法 参数: 二维码内容:fileUrl 二维码图片名:typeName #regi ...

  2. C# 利用QRCode生成二维码图片

    网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了 ...

  3. qrcode 生成二维码

    qrcode 生成二维码 Demo: https://www.hgnulb.cn/freedom/qrcode/qrcode.html qrcodeGithub 地址: https://github. ...

  4. 使用jquery.qrcode生成二维码及常见问题解决方案

    转载文章  使用jquery.qrcode生成二维码及常见问题解决方案 一.jquery.qrcode.js介 jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery ...

  5. C#Qrcode生成二维码支持中文,带图片,带文字

    C#Qrcode生成二维码支持中文带图片的操作请看二楼的帖子,当然开始需要下载一下C#Qrcode的源码 下载地址 : http://www.codeproject.com/Articles/2057 ...

  6. python_使用qrcode生成二维码

    1.功能 使用qrcode生成二维码 2.代码 #生成二维码: import qrcode #根据url生成二维码 def qrcodeWithUrl(url): img = qrcode.make( ...

  7. 使用jquery.qrcode生成二维码实现微信分享功能

    前言: 最近有个这样的需求,在pc端的商品详情页增加分享功能. 微博分享.QQ好友分享.QQ空间分享这些都很常见.但是微信分享我还没有手动写过(以前改过). 最终效果如下图: 解决方案:使用jquer ...

  8. QRCode生成二维码,jq QRCode生成二维码,QRCode生成电子名片

    [QRCode官网]http://phpqrcode.sourceforge.net/ PHP QRCode生成二维码 官网下载QRCode源码包,引入源码包中的 qrlib.php . <?p ...

  9. thinkphp3.2集成QRcode生成二维码

    一.下载QRcode源代码 https://sourceforge.net/projects/phpqrcode/files/releases/ 使用phpqrcode必须开启GD2扩展,phpqrc ...

随机推荐

  1. 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题

    分析原因: 导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请 ...

  2. 经典Paxos算法笔记

    介绍 Paxos算法是一个高容错性的分布式一致性算法.去年学习过Paxos算法,一直没将整理到博客.现在将经典Paxos算法相关内容整理到博客上. 经典Paxos算法本身也并不是太难理解,Lampor ...

  3. mac下idea 13 在tomcat 7控制台乱码

    在mac或linux下idea 13(可能其它版本也会出现乱码) tomcat 7在输出到控制台的日志中文乱码,解决方式 加一个environment variable, 在如图绿色位置添加   JA ...

  4. Codeforces Round #503 Div. 2

    时间相对来说还是比较合适的,正好放假就可以打一打啦. A. New Building for SIS:http://codeforces.com/contest/1020/problem/A 题意概述 ...

  5. BZOJ2580:[USACO]Video Game(AC自动机,DP)

    Description Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the ...

  6. BZOJ4236:JOIOJI(乱搞)

    Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由 ...

  7. apache中的directory 和virtualhost有啥区别和联系呀

    directory是virtualhost里的一项.用来指定目录访问权限与方法 . alias用来指定URL中的路径.第二项是物理路径,与directory完全相同才成. location有些象是将a ...

  8. PReLU与ReLU

    PReLU激活函数,方法来自于何凯明paper <Delving Deep into Rectifiers:Surpassing Human-Level Performance on Image ...

  9. <数据结构与算法分析>读书笔记--利用Java5泛型实现泛型构件

    一.简单的泛型类和接口 当指定一个泛型类时,类的声明则包括一个或多个类型参数,这些参数被放入在类名后面的一对尖括号内. 示例一: package cn.generic.example; public ...

  10. JAVA框架:hibernate

    一:介绍 hibernate是java中的dao层,即和持久层打交道.底层也是数据库驱动.连接等.他也有orm,类和数据库的映射. 二.部署 下载地址:https://sourceforge.net/ ...