C# ThoughtWorks.QRCode 二维码生成和解析


介绍

在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码。无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码。二维码 (dimensional barcode) ,又称二维条码,是在一维条码的基础上扩展出的一种具有可读性的条码。设备扫描二维条码,通过识别条码的长度和宽度中所记载的二进制数据,可获取其中所包含的信息。相比一维条码,二维码记载更复杂的数据,比如图片、网络链接等。

QRCode库是一个.NET组件,可用于编码和解码QRCode。 QRCode是源自日本的二维条形码。 现在,它广泛应用于广泛的工业领域。 用于车辆部件跟踪和库存管理。QR代表“快速反应”。 它是日本公司Denso-Wave在1994年创建的,目的是高速解码内容。 如今,QR码被用于手机中以缓解数据输入。QRCode还可以打印在名片上或显示在任何显示器上,然后可以由移动电话捕获,只要移动电话具有读取QRCode的软件。QRCode库提供的功能包括:将内容编码为QR码图像,可以保存为JPEG,GIF,PNG或位图格式;解码QR码图像。    该库可用于任何.NET 2.0 Windows应用程序,ASP.NET Web应用程序或Windows Mobile设备应用程序。以下是该组件的声明”本文以及任何相关的源代码和文件均已获得代码项目开放许可证(CPOL)许可“。

纠错能力 · L级:约可纠错7%的数据码字· M级:约可纠错15%的数据码字· Q级:约可纠错25%的数据码字· H级:约可纠错30%的数据码字

qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; (纠错级别不是越大越好的!

Nuget 引用

<package id="ThoughtWorks.QRCode" version="1.1.0" targetFramework="net461" />

源码下载

中国好程序员/二维码识别生成工具-ThoughtWorks.QRCode标准库 - 码云 - 开源中国 (gitee.com)

生成二维码,不带LOGO

/// <summary>
/// 生成二维码(中间不带LOGO)
/// </summary>
/// <param name="absoluteSave">保存的绝对路径</param>
/// <param name="qrdata">要附加的内容</param>
/// <returns></returns>
public void CreateQRCode(string absoluteSave, string qrdata)
{
    try
    {
        QRCodeEncoder encoder = new QRCodeEncoder();
        encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
        encoder.QRCodeScale = 4;//大小(值越大生成的二维码图片像素越高)
        encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
        encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//错误效验、错误更正(有4个等级)
        encoder.QRCodeBackgroundColor = Color.White;
        encoder.QRCodeForegroundColor = Color.Black;
        System.Drawing.Image image = encoder.Encode(qrdata, Encoding.UTF8);
        System.IO.Directory.CreateDirectory(absoluteSave);
        image.Save(SaveFilePath, ImageFormat.Png);
        image.Dispose()
      }
    catch (Exception e)
    {
        //一些操作
    }
}
GarsonZhang www.yesdotnet.com

生成二维码,带Logo

 

/// <summary>
/// 生成二维码(中间带LOGO)
/// </summary>
/// <param name="absoluteSave">保存的绝对路径</param>
/// <param name="qrdata">要附加的内容</param>
///<param name="absoluteSave">保存的绝对路径</param>
/// <returns></returns>
public Image CreateQRCode(string qrdata, Image logo)
{
    try
    {
        QRCodeEncoder encoder = new QRCodeEncoder();
        encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
        encoder.QRCodeScale = 5;//大小(值越大生成的二维码图片像素越高) ,带Logo,这里要设置成单数,不然logo无法居中
        encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
        encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//错误效验、错误更正(有4个等级)
        encoder.QRCodeBackgroundColor = Color.White;
        encoder.QRCodeForegroundColor = Color.Black;

        System.Drawing.Image image = encoder.Encode(qrdata, Encoding.UTF8);

        Graphics g = Graphics.FromImage(image);
        int width1 = image.Width / 4;
        int height1 = image.Height / 4;
        int x = image.Width / 2 - width1 / 2;
        int y = image.Height / 2 - height1 / 2;
        g.FillRectangle(new SolidBrush(Color.White), x, y, width1, height1);
        Bitmap copyImage = new Bitmap(logo, width1 - image.Width / 40, height1 - image.Height / 40);
        g.DrawImage(copyImage, x + image.Width / 40 / 2, y + image.Height / 40 / 2);

        copyImage.Dispose();
        g.Dispose();

        return image;
    }
    catch (Exception e)
    {
        //一些操作
    }
}
GarsonZhang www.yesdotnet.com

以微信二维码为例

单个方格 的 宽度 为 总宽度/40
Logo区域 的 宽度 为 10个方格宽度 img.Width / 4
Logo图像 的 宽度 为 9个方格的宽度
Logo图像 的 边界留白 为 0.5 个方格宽度
圆角还未实现 

解析二维码

/// <summary>
/// 解析二维码
/// </summary>
/// <param name="absoluteSave">二维码的绝对路径</param>
/// <returns></returns>
public static string DeCode(string AbsoluteQRCodePath)
{
    string decodedString = new QRCodeDecoder().decode(new QRCodeBitmapImage(new Bitmap(AbsoluteQRCodePath)), Encoding.UTF8);
    return decodedString;
}
GarsonZhang www.yesdotnet.com

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:微信支付:API v3 Postman脚本使用指南
下一篇:C# 如何给HttpClient添加Accept:text/plain的请求头
评论列表

发表评论

评论内容
昵称:
关联文章

C# ThoughtWorks.QRCode 生成
支付宝支付对接,当面付,根据金额生成付款
验证生成
MH/T4029.3 IFPL报文
02、2G流量版收款播报机写
C# 读取txt文件生成Word文档
C# 多线程入门系列(
03、4G 收款播报机写
生成随机数
关于元插值问题的探讨
C# ASP.NET Core开发学生信息管理系统(
DevExpress 19.2 破
C# 利用SharpZipLib对*.rar压缩文件压报错
C# RestSharp上传下载图片
C#实现INotifyPropertyChanged的优雅封装方案(含简洁写法与自动生成
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
利用代码生成工具Database2Sharp生成ABP VNext框架项目代码
基于欧姆龙PLC#FinsTcp协议上位机通讯()-C#通讯模块开发
c# IdHelper生成唯一的雪花Id
C#性能优化总结

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码