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
}
}
C#使用ThoughtWorks.QRCode.dll生成二維碼以及解碼