1. 程式人生 > >C#使用ThoughtWorks.QRCode.dll生成二維碼以及解碼

C#使用ThoughtWorks.QRCode.dll生成二維碼以及解碼

獲取 static esc coder tasks raw sys 根據 tex

最近一段時間在網上找了二維碼的生成代碼,但是生成的二維碼右上角的背景色總是透明的,所以自己拿過來改了一下,給自己做個總結。

代碼如下:

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
  }
}

C#使用ThoughtWorks.QRCode.dll生成二維碼以及解碼