二维码生成与解析(使用ThoughtWorks.QRCode)

二维码生成

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //  support different mode

qrCodeEncoder.QRCodeScale = 1;
qrCodeEncoder.QRCodeVersion = 1.0;

qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; // support different mode

string qrCodeContent = "test";

Bitmap img = qrCodeEncoder.Encode(qrCodeContent);

string filePath = "c:\\qrcode.png" // support different image format

img.Save(filePath);

二维码解析

QRCodeDecoder decoder = new QRCodeDecoder();
string decodedString = decoder.decode(new QRCodeBitmapImage(new Bitmap("c:\\qrcode.png"))); // decodedStringshould be "test".

C#使用ThoughtWorks.QRCode.dll生成二维码以及解码

最近一段时间在网上找了二维码的生成代码,但是生成的二维码右上角的背景色总是透明的,所以自己拿过来改了一下,给自己做个总结。

代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;

namespace 生成二维码
{
    
    
  class QRCodeHelper
  {
    
    
    #region 根据内容获取二维码
    /// <summary>
    /// 根据内容获取二维码
    /// </summary>
    /// <param name="str">内容</param>
    /// <returns>返回二维码图片</returns>
    public static Bitmap GetQRCodeBmp(string str)
    {
    
    
      try
      {
    
    
        QRCodeEncoder qRCodeEncoder = new QRCodeEncoder();//实例化二维码对象
        qRCodeEncoder.QRCodeBackgroundColor = Color.White;//设置二维码背景颜色
        qRCodeEncoder.QRCodeForegroundColor = Color.Black;//设置二维码前景色
        qRCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//设置二维码编码类型
        qRCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//设置二维码拍错率
        qRCodeEncoder.QRCodeScale = 4;//设置二维码的大小
        qRCodeEncoder.QRCodeVersion = 7;//设置二维码的版本
        Bitmap bmp = qRCodeEncoder.Encode(str);
        //对二维码进行重绘
        Bitmap bitmap = new Bitmap(bmp.Width + 3, bmp.Height + 3);
        Graphics g = Graphics.FromImage(bitmap);
        g.Clear(Color.White);
        g.DrawRectangle(new Pen(Color.White), new Rectangle(0, 0, bitmap.Width, bitmap.Height));
        g.DrawImage(bmp, new PointF(2, 2));

        return bitmap;
      }
      catch (Exception)
      {
    
    
        return null;
      }    
    }
    /// <summary>
    /// 对二维码图片进行处理
    /// </summary>
    /// <param name="QrImg">二维码</param>
    /// <returns>处理过后的二维码</returns>
    public Bitmap RedrawQrImg(Bitmap QrImg)
    {
    
    
      Bitmap bitmap = new Bitmap(QrImg.Width + 3, QrImg.Height + 3);
      Graphics g = Graphics.FromImage(bitmap);
      g.Clear(Color.White);
      g.DrawRectangle(new Pen(Color.White), new Rectangle(0, 0, bitmap.Width, bitmap.Height));
      g.DrawImage(QrImg, new PointF(2, 2));

      return bitmap;
    }
    /// <summary>
    /// 二维码解码
    /// </summary>
    /// <param name="filePath">图片路径</param>
    /// <returns></returns>
    public static string CodeDecoder(string filePath)
    {
    
    
      try
      {
    
    
        if (!System.IO.File.Exists(filePath))
          return null;
        Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
        QRCodeDecoder decoder = new QRCodeDecoder();
        string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
        return decodedString;
      }
      catch (Exception)
      {
    
    
        return null;
      }
    }
  #endregion
  }
}

使用

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebDemo
{
    
    
    public partial class QRTest : System.Web.UI.Page
    {
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
    
           Bitmap bmap= QRCodeHelper.GetQRCodeBmp("WWW.QQ.com");
           bmap.Save(Server.MapPath("~/Img/saved.png"));

            string fullpath = Server.MapPath("~/Img/ewm.png");
            string resultstr = QRCodeHelper.CodeDecoder(fullpath);

            Response.Write(resultstr);
        }
    }
}

如图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/WuLex/article/details/109079582
今日推荐