.net通过QRCoder生成二维码
public class ExtendFileHelper : Common.FileHelper { /// <summary> /// 生成二维码图片 /// </summary> /// <param name="str"></param> /// <returns></returns> private Bitmap CreateQRimg(string str) { QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.Q); QRCoder.QRCode qrCode = new QRCoder.QRCode(qrCodeData); Bitmap bt = qrCode.GetGraphic(20); return bt; } /// <summary> /// 生成二维码图片流(二维码上含文字) /// </summary> /// <param name="url">二维码中要传递的数据(地址)</param> /// <param name="title">二维码上显示的文字说明</param> public byte[] GenerateQrCode(string url, string title) { using (Image codeImage = CreateQRimg(url), strImage = ConvertStringToImage(title)) { Image img = CombineImage(600, 600, codeImage, 0, 0, strImage, 0, 550); using (var stream = new MemoryStream()) { img.Save(stream, ImageFormat.Jpeg); //输出图片流 return stream.ToArray(); } } } /// <summary> /// 生成二维码图片流(二维码上含文字) /// </summary> /// <param name="str1">二维码中要传递的数据(地址)</param> /// <param name="str2">二维码上显示的文字说明</param> public Image GenerateQrCodeImg(string str1, string str2) { Image img; using (Image codeImage = CreateQRimg(str1), strImage = ConvertStringToImage(str2)) { img = CombineImage(600, 600, codeImage, 0, 0, strImage, 0, 550); } return img; } /// <summary> /// 生成文字图片 /// </summary> /// <param name="str"></param> /// <returns></returns> private Image ConvertStringToImage(string str) { Bitmap image = new Bitmap(600, 40, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(image); try { Font font = new Font("SimHei", 14, FontStyle.Regular); g.Clear(Color.White); StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; Rectangle rectangle = new Rectangle(0, 0, 600, 40); g.DrawString(str, font, new SolidBrush(Color.Black), rectangle, format); return image; } catch (Exception e) { throw e; } finally { GC.Collect(); } } /// <summary> /// 在画板中合并二维码图片和文字图片 /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="imgLeft"></param> /// <param name="imgLeft_left"></param> /// <param name="imgLeft_top"></param> /// <param name="imgRight"></param> /// <param name="imgRight_left"></param> /// <param name="imgRight_top"></param> /// <returns></returns> private Image CombineImage(int width, int height, Image imgLeft, int imgLeft_left, int imgLeft_top, Image imgRight, int imgRight_left, int imgRight_top) { Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(image); try { g.Clear(Color.White); g.DrawImage(imgLeft, imgLeft_left, imgLeft_top, 600, 600); g.DrawImage(imgRight, imgRight_left, imgRight_top, imgRight.Width, imgRight.Height); return image; } catch (Exception e) { throw e; } finally { g.Dispose(); } } }
输出流调用方式:
var qrCode = new ExtendFileHelper(); var url = "http://www.baidu.com"; var image = qrCode.GenerateQrCode(url, "这是标题"); Response.ClearContent(); Response.ContentType = "image/Jpeg"; Response.BinaryWrite(image); Response.Flush();
保存图片文件:
var qrCode = new ExtendFileHelper(); var url = "http://www.baidu.com"; var image = qrCode.GenerateQrCodeImg(url, "这是标题"); image.Save(AppDomain.CurrentDomain.BaseDirectory+"/Upload/"+DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");