using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Text.RegularExpressions;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;
namespace Demo
{
public class QRCodes
{
public static Bitmap GenerateCode(EnCode encoding, ErrorCorrect errorCorrect, int scale, int version, string encodeData, out string errMsg)
{
Bitmap image = null;
errMsg = string.Empty;
if (string.IsNullOrEmpty(encodeData))
{
errMsg = "输入二维码数据不能为空!";
return image;
}
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
if (encoding == EnCode.Byte)
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
}
else if (encoding == EnCode.AlphaNumeric)
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
}
else if (encoding == EnCode.Numeric)
{
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
}
if (errorCorrect == ErrorCorrect.L)
{
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
}
else if (errorCorrect == ErrorCorrect.M)
{
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
}
else if (errorCorrect == ErrorCorrect.Q)
{
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
}
else if (errorCorrect == ErrorCorrect.H)
{
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
}
qrCodeEncoder.QRCodeVersion = version;
qrCodeEncoder.QRCodeScale = scale;
if (QRCodeUtility.IsUniCode(encodeData))
{
image = qrCodeEncoder.Encode(encodeData, Encoding.GetEncoding("gb2312"));
}
else
{
image = qrCodeEncoder.Encode(encodeData, Encoding.ASCII);
}
return image;
}
public static Bitmap GenerateCode(EnCode encoding, ErrorCorrect errorCorrect, int scale, int version, string encodeData, string filePath, out string errMsg)
{
errMsg = string.Empty;
Bitmap image = GenerateCode(encoding, errorCorrect, scale, version, encodeData, out errMsg);
if (!string.IsNullOrEmpty(errMsg))
{
return image;
}
string strExt = filePath.Substring(filePath.LastIndexOf(".")+1, filePath.Length - filePath.LastIndexOf(".") - 1);
System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
if (strExt.ToLower() == "jpg")
{
image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
}
else if (strExt.ToLower() == "bmp")
{
image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
}
else if (strExt.ToLower() == "gif")
{
image.Save(fs, System.Drawing.Imaging.ImageFormat.Gif);
}
else if (strExt.ToLower() == "png")
{
image.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
}
fs.Close();
return image;
}
public static Bitmap GetCodeImage(string filePathName, out string codeData)
{
Bitmap img = null;
codeData = string.Empty;
if (filePathName.Length < 5)
{
return img;
}
QRCodeDecoder decoder = new QRCodeDecoder();
System.IO.FileStream fs = new System.IO.FileStream(filePathName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
img = new Bitmap(fs);
codeData = decoder.decode(new QRCodeBitmapImage(img), Encoding.GetEncoding("gb2312"));
fs.Close();
return img;
}
public enum EnCode
{
Byte = 0,
AlphaNumeric = 1,
Numeric = 2
};
public enum ErrorCorrect
{
L = 0,
M = 1,
Q = 2,
H = 3
};
}
}