后端
public class QRCode
{
///
/// 生成带Logo的二维码
///
/// 链接
/// logo地址
/// 文件夹名
public static string Generate(string url, string LogoPath, string PathUrl)
{
//Logo 图片
string path = AppDomain.CurrentDomain.BaseDirectory + LogoPath;
Bitmap logo = new Bitmap(@path);
//构造二维码写码器
MultiFormatWriter writer = new MultiFormatWriter();
Dictionary hint = new Dictionary();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//生成二维码
BitMatrix bm = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300, hint);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap map = barcodeWriter.Write(bm);
//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
int[] rectangle = bm.getEnclosingRectangle();
//计算插入图片的大小和位置
int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width);
int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height);
int middleL = (map.Width - middleW) / 2;
int middleT = (map.Height - middleH) / 2;
//将img转换成bmp格式,否则后面无法创建Graphics对象
Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(map, 0, 0);
}
//将二维码插入图片
Graphics myGraphic = Graphics.FromImage(bmpimg);
//白底
myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH);
//保存成图片
string SavePath = AppDomain.CurrentDomain.BaseDirectory;
//string dated = DateTime.Now.ToString("yyyyMMdd");
string dates = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string SavePathUrl = @"Upload/QRCode/" + PathUrl + @"/";
if (!string.IsNullOrEmpty(SavePath))
{
SavePath += @"Upload\QRCode\" + PathUrl + @"\";
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath);
}
SavePath += dates + "_" + Number(6) + ".png";
SavePathUrl += dates + "_" + Number(6) + ".png";
bmpimg.Save(@SavePath, ImageFormat.Png);
}
return SavePathUrl;
}
public static string GenerateBase64(string LogoPath, string url)
{
//Logo 图片
string path = AppDomain.CurrentDomain.BaseDirectory + LogoPath;
Bitmap logo = new Bitmap(@path);
//构造二维码写码器
MultiFormatWriter writer = new MultiFormatWriter();
Dictionary hint = new Dictionary();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//生成二维码
BitMatrix bm = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300, hint);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap map = barcodeWriter.Write(bm);
//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
int[] rectangle = bm.getEnclosingRectangle();
//计算插入图片的大小和位置
int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width);
int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height);
int middleL = (map.Width - middleW) / 2;
int middleT = (map.Height - middleH) / 2;
//将img转换成bmp格式,否则后面无法创建Graphics对象
Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(map, 0, 0);
}
//将二维码插入图片
Graphics myGraphic = Graphics.FromImage(bmpimg);
//白底
myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH);
return BitMapToBase64String(bmpimg);//图片转base64编码
}
//图片转为base64编码的字符串
public static string BitMapToBase64String(Bitmap bmp)
{
try
{
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}
///
/// 生成随机数字
///
/// 生成长度
///
public static string Number(int Length)
{
return Number(Length, false);
}
///
/// 生成随机数字
///
/// 生成长度
/// 是否要在生成前将当前线程阻止以避免重复
///
public static string Number(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(3);
string result = "";
System.Random random = new Random();
for (int i = 0; i < Length; i++)
{
result += random.Next(10).ToString();
}
return result;
}
}
case "qrcode"://二维码
//传入两个参数action=qrcode&mainkeyid=
string b64 = QRCode.GenerateBase64(@"JydModleOrder\img\jyd.png", ConfigHelper.GetValue("website") + "/JydModleOrder/QRCodeView.aspx?KeyID=" + context.Request["mainkeyid"]);
context.Response.Write(b64);
break;
前台调用