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. Angular简介与程序架构

    什么是angularJs 基于javascript开发的客户端应用框架,使我们可以更加快捷,简单的开发web应用. 诞生于2009年,后来被google收购,用在了很多项目中. 适用于CRUD应用或者 ...

  2. BZOJ5016:[SNOI2017]一个简单的询问(莫队)

    Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input 第 ...

  3. 随手练——小米OJ 高弗雷勋爵

    高弗雷勋爵 题目链接:https://code.mi.com/problem/list/view?id=113 这个解法比较暴力,主要需要注意的是一颗子弹 弹死两个及以上的情况. #include & ...

  4. 使用<button></button>标签

    使用<button></button>标签一定要记住给它设置type,因为它默认的type=“submit”,会提交表单,设置如下 <button type=" ...

  5. OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  6. java剪辑音频

    用来剪辑特定长度的音频,并将它们混剪在一起,大体思路是这样的: 1. 使用 FileInputStream 输入两个音频 2. 使用 FileInputStream的skip(long n) 方法跳过 ...

  7. js 按指定属性给对象数组排序(json数组)

    有时,我们有一个json对象的数组集合,如何按指定对象属性来进行排序? //fieldArr为一个json对象数组 var fieldArr = fieldArr.sort(compare(" ...

  8. python下安装lxml

    首先在环境变量path中添加:C:\Python27\Scripts 然后打开cmd命令窗口,输入以下命令: easy_install virtualenv easy_install  lxml 这样 ...

  9. sql语句截取字符串

    Postgresql 当中有四种方式获取当前时间.  一:now()      通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数.      select now();     ...

  10. spring-boot dubbo项目使用docker方式部署

    项目结构 本项目采用maven构建,有三个模块,分别是pms-interfaces, pms-services, pms-portal. 模块 描述 pms-interfaces 接口层,只能存放实体 ...