/// <summary>
/// 生成彩色二维码
/// </summary>
/// <param name="data">二维码内容</param>
/// <param name="filename">生成的图片名称(如:123.jpg)</param>
/// <param name="filepath">图片存放路径(如:Images\\CustomerQRCode)</param>
/// <returns></returns>
public static bool CreateQRCode(string data, string filename, string filepath)
{
if (string.IsNullOrWhiteSpace(data) || string.IsNullOrWhiteSpace(filename) || string.IsNullOrWhiteSpace(filepath))
return false;
QRCodeWriter writer = new QRCodeWriter();
Hashtable hints = new Hashtable();
hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.Add(EncodeHintType.VERSION_START, 5);
Bitmap image = writer.encode(data, BarcodeFormat.QR_CODE, 0x200, 0x200, hints).ToBitmap();//黑白二维码
Bitmap bitmap2 = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb);
Graphics graphics = Graphics.FromImage(bitmap2);
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawImage(image, 0, 0);
image.Dispose();
Bitmap bitmap3 = QrCodeVertical(bitmap2.Width, bitmap2.Height);//彩色渐变二维码
Color color = Color.FromArgb(200, 224, 114, 1);
int num = 140;
try
{
num -= (Encoding.UTF8.GetBytes(data).Length - 20) / 2;
}
catch (Exception)
{
}
int num2 = num;
int num3 = num2;
for (int i = 0; i < bitmap2.Width; i++)
{
for (int j = 0; j < bitmap2.Height; j++)
{
Color color3;
Color pixel = bitmap2.GetPixel(i, j);
if ((i < num2) && (j < num3))
{
color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? color : pixel;
}
else
{
color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? bitmap3.GetPixel(i, j) : pixel;
}
bitmap2.SetPixel(i, j, color3);
}
}
bitmap3.Dispose();
#region 添加二维码标题
string str2 = "";//标题一
if (str2.Length < 1)
{
str2 = "MyTest";
}
float emSize = 32f;
emSize -= (str2.Length - 4) * 1.8f;
Font font = new Font("微软雅黑", emSize, FontStyle.Bold);
SizeF ef = graphics.MeasureString(str2, font);
float num7 = (bitmap2.Width - ef.Width) / 2f;
Brush brush = new SolidBrush(Color.FromArgb(0xff, 0x3a, 0xb2, 0xc2));
Brush brush2 = new SolidBrush(Color.White);
int y = 50;
graphics.FillRectangle(brush2, new Rectangle((int)num7, y, (int)ef.Width, (int)ef.Height));
graphics.DrawString(str2, font, brush, (float)((int)num7), (float)y);
Brush brush3 = new SolidBrush(Color.FromArgb(0xff, 0x3a, 0xb2, 0xc2));
int width = 140;
graphics.FillEllipse(brush2, (bitmap2.Width - width) / 2, (bitmap2.Height - width) / 2, width, width);
int num10 = 0x80;
graphics.FillEllipse(brush3, (bitmap2.Width - num10) / 2, (bitmap2.Height - num10) / 2, num10, num10);
int num11 = 110;
graphics.FillEllipse(brush2, (bitmap2.Width - num11) / 2, (bitmap2.Height - num11) / 2, num11, num11);
#endregion
#region 添加二维码中间内容
str2 = "";//标题二
if (str2.Length < 1)
{
str2 = "Test";
}
float num12 = 32f;
num12 -= (str2.Length - 3) * 3.5f;
Font font2 = new Font("Meiryo", num12, FontStyle.Bold);
ef = graphics.MeasureString(str2, font2);
float x = ((bitmap2.Width - ef.Width) / 2f) + 2f;
float num14 = ((bitmap2.Height - ef.Height) / 2f) + 8f;
graphics.DrawString(str2, font2, brush3, x, num14);
graphics.Dispose();
#endregion
filepath = System.Web.HttpContext.Current.Server.MapPath(@"~\"+ filepath) + "\\" + filename;
//filepath = filepath + filename;
System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
bitmap2.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
fs.Close();
image.Dispose();
return true;
}