[开源]C#二维码生成解析工具,可添加自定义Logo

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:   二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,中文等等。

  二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,中文等等。今天就来跟大家分享一下我的二维码生成解析工具,主要功能就是生成二维码,并且可以添加自定义的Logo。当然,网络上面生成二维码的工具多如牛毛,生成二维码早已不再新鲜。这个工具的一个亮点就是可以识别二维码,下面就来具体看看吧,不过首先要补充一点二维码的知识。

 一、二维码基础知识

一、二维码的版本

  首先,我们先说一下二维码一共有 40 个尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增加一个 version,就会增加 4 的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高 Version 40,(40-1)*4+21 = 177,所以最高是 177 x 177 的正方形。

下面我们看看一个二维码的实例:

二、QR码的容错处理

二维码支持纠错处理;纠错处理相对复杂,按照QR码的标准文档说明,QR码的纠错分为4个级别,分别是:

  • level L : 最大 7% 的错误能够被纠正;
  • level M : 最大 15% 的错误能够被纠正;
  • level Q : 最大 25% 的错误能够被纠正;
  • level H : 最大 30% 的错误能够被纠正;

 三、二维码(QR Code)的容量

  对于不同版本的二维码,容量也是不同的。理论上内容经过压缩处理后可以存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;在上面我们看到,不同的Version的QR Code是不同的矩阵,Version版本越过,也就意味着容量越大。关于容量的计算我没有找到比较权威的算法,这里以第一版的来进行计算,第一版(21×21)的格式如下:

其中的只有黄色的是存储数据的内容,在第一版本中只有217(21×21 - 8*9*3 -8)个存储数据的数空间,而其中有用的数据是 217 - 1个数据结尾标志 = 216 ,在216bit 

216bit/8 = 27Byte 在版本一的QR码中只能够存储27Byte的数据(要是有校验容错就更少了),当然在不同的容错级别下,容量也是有变化的。

所以,version为1的QR Code大概也就能容下十几个字符。

 

四、二维码的编码

QR 码支持如下的编码:

  Numeric mode 数字编码,从 0 到9。如果需要编码的数字的个数不是 3 的倍数,那么,最后剩下的 1 或 2 位数会被转成 4 或 7bits,则其它的每 3 位数字会被编成 10,12,14bits,编成多长还要看二维码的尺寸(下面有一个表 Table 3 说明了这点)

  Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。如下所示:(其中的 SP 是空格,Char 是字符,Value 是其索引值) 编码的过程是把字符两两分组,然后转成下表的 45 进制,然后转成 11bits 的二进制,如果最后有一个落单的,那就转成 6bits 的二进制。而编码模式和字符的个数需要根据不同的 Version 尺寸编成9, 11 或 13 个二进制(如下表中 Table 3)

Byte mode, 字节编码,可以是0-255 的 ISO-8859-1 字符。有些二维码的扫描器可以自动检测是否是 UTF-8 的编码。

 

 二、QRCode生成解析工具简介

   这个工具是用WPF基于开源项目ThoughtWorks.QRCode.dll开发的,没有复杂的生成二维码的算法,无论你是新手还是大牛,都能看的懂。看到这里有些使用过的ThoughtWorks.QRCode.dll的大牛们可能就失望了,不过研究二维码生成的算法确实需要学习很多的东西,还要参考很多的资料,大家有兴趣的可以自己研究一下ThoughtWorks.QRCode的源码,下面给出了一些参考资料。下面来先来看看工具的截图:

ThoughtWorks.QRCode源码地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library

ThoughtWorks.QRCodeGithub地址:https://github.com/aaronogan/QR.NET

界面很简单,下面简单来说明一下:

二维码的内容:生成的二维码内容,可以输入任何的字符串,比如网址之类的,支持中文。

二维码尺寸:生成二维码的大小,默认值为4,数字越大,生成的二维码越大,可以根据需求填写。

二维码版本:二维码的Version,值为1~40,version越高,二维码信息容量越大。但是目前30以上的版本生成的二维码,由于手机摄像头等原因会造成手机无法识别。

生成:生成指定内容的二维码,然后显示在左下方的图片框中。

保存:保存二维码,将二维码另存为png格式的图片。

打开二维码:打开二维码图片,显示在左下方的图片框中。

解析:解析左下方中图片框中的二维码,解析结果会显示在二维码内容后面。

自定义Logo:点击添加图片作为Logo,不添加则生成的二维码中没有Logo.

 

下面来生成一个二维码看看吧,如图:

然后我们添加一个Logo来看看吧,如下图:

由于Logo的尺寸可以自由调节,有时候Logo设置的过大,会覆盖二维码中的部分信息,造成无法识别。这个时候,我们可以点击解析按钮,来测试我们的二维码是否有效,如图:

我们看到解析出来的内容出现了乱码,这个就是因为我们的Logo尺寸太大了,我们可以减小Logo的尺寸或者增大二维码的尺寸,这里我修改二维码尺寸为6,然后就可以正常识别了。然后我们点击保存按钮,打开另存为对话框,会保存为png格式的图片,实际生产的二维码尺寸如图:

 下面我们来看一下解析二维码,我们从百度上面随便下载一个二维码图片,看看里面保存了什么,如图:

这里我们可以鼠标选择文本复制,或者直接点击复制到剪切板来复制二维码的内容。

 

下面来说说一些Bug处理,首先要说的是二维码的容量问题,Version为1的二维码容量约为十几个字符,超出容量就会出现下面错误,如图:

当然,如果你随便打开一张无效的二维码图片当做二维码来解析,会出现如下错误,如图:

当然,如果图片中含有二维码还是可以解析成功的,如图:

 

 三、GitHub开源地址

 Github地址:https://github.com/yunfeifei/QRCodeTools

 

当然,软件还有很多要优化的地方,存在许多未知的Bug,后面会不断修改更新。欢迎大家进行评测,指出bug和不足之处。经过测试,如果二维码太大或者版本太高都会出现识别不了的情况,当然选择合适的尺寸和版本还是正常使用的。

 

 参考链接

 二维码的生成细节和原理

QR码生成原理(一)

 

 作者:雲霏霏

QQ交流群:243633526

 博客地址:http://www.cnblogs.com/yunfeifei/

 声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

如果大家感觉我的博文对大家有帮助,请推荐支持一把,给我写作的动力。

 

目录
相关文章
|
3天前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
69 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
3天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
46 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
4月前
|
C# Windows
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
这篇文章提供了Visual Studio 2022社区版C#环境的搭建和安装使用指南,包括下载、安装步骤和创建C#窗体应用程序的详细图文解析。
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
|
6天前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
6天前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
2月前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
51 7
C# 9.0 新特性解析
|
2月前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
39 2
|
2月前
|
自然语言处理 并行计算 数据可视化
免费开源法律文档比对工具:技术解析与应用
这款免费开源的法律文档比对工具,利用先进的文本分析和自然语言处理技术,实现高效、精准的文档比对。核心功能包括文本差异检测、多格式支持、语义分析、批量处理及用户友好的可视化界面,广泛适用于法律行业的各类场景。
|
4月前
|
监控 数据可视化 搜索推荐
万界星空科技商业开源MES系统全面解析
万界星空MES系统支持对生产现场的实时监控,包括设备运行状态、生产进度、质量数据等关键信息的即时反馈。通过可视化的数据展示,管理者能够直观掌握生产全貌,及时发现问题并采取措施
98 5
|
3月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
134 0

推荐镜像

更多