需引用ThoughtWorks.QRCode.dll文件
using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; namespace Web12 { public partial class erweima : System.Web.UI.Page { protected string img = null; protected void Page_Load(object sender, EventArgs e) { string content = string.IsNullOrEmpty(Request.QueryString["txt"]) ? "https://www.baidu.com/" : Request.QueryString["txt"]; int size = Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString["size"]) ? "200" : Request.QueryString["size"]); int border = Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString["border"]) ? "10" : Request.QueryString["border"]); System.Drawing.Image image = CreateQRCode(content, QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION.M, 0, 5, size, border,Color.DarkRed); //将图片输出到页面 //System.IO.MemoryStream ms = new System.IO.MemoryStream(); //image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); //HttpContext.Current.Response.ClearContent(); //HttpContext.Current.Response.ContentType = "image/Png"; //HttpContext.Current.Response.OutputStream.Write(ms.ToArray(), 0, ms.ToArray().Length); string filename = DateTime.Now.ToString("yyyymmddhhmmss"); string filepath = HttpContext.Current.Server.MapPath("NewFolder/gis_icon.png"); if (filepath != string.Empty)//如果有logo的话则添加logo { Bitmap btm = new Bitmap(filepath); Bitmap copyImage = new Bitmap(btm, image.Width / 5, image.Height / 5); Graphics g = Graphics.FromImage(image); int x = image.Width / 2 - copyImage.Width / 2; int y = image.Height / 2 - copyImage.Height / 2; g.DrawImage(copyImage, x, y); } string path = Server.MapPath("~/NewFolder/") + filename + ".png"; image.Save(path); img = "/NewFolder/" + filename + ".png"; string filepath2 = "NewFolder/" + filename + ".png"; //HttpContext.Current.Response.End(); //解析二维码信息 string codeDecoder = CodeDecoder(filepath2); this.Label1.Text = codeDecoder; //ms.Close(); //ms = null; image.Dispose(); image = null; } /// <summary> /// 二维码解码 /// </summary> /// <param name="filePath">图片路径</param> /// <returns></returns> public string CodeDecoder(string filePath) { if (!System.IO.File.Exists(HttpContext.Current.Server.MapPath(filePath))) return null; Bitmap myBitmap = new Bitmap(System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(filePath))); QRCodeDecoder decoder = new QRCodeDecoder(); string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap)); return decodedString; } /// <summary> /// 生成二维码 /// </summary> /// <param name="Content">内容文本</param> /// <param name="QRCodeEncodeMode">二维码编码方式</param> /// <param name="QRCodeErrorCorrect">纠错码等级</param> /// <param name="QRCodeVersion">二维码版本号 0-40</param> /// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param> /// <param name="size">图片尺寸(像素),0表示不设置</param> /// <param name="border">图片白边(像素),当size大于0时有效</param> /// <returns></returns> public System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border, Color codeEyeColor) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncodeMode; qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect; qrCodeEncoder.QRCodeScale = QRCodeScale; qrCodeEncoder.QRCodeVersion = QRCodeVersion; System.Drawing.Image image = qrCodeEncoder.Encode(Content); #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框 if (size > 0) { //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸 #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸 while (image.Width < size) { qrCodeEncoder.QRCodeScale++; System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content); if (imageNew.Width < size) { image = new System.Drawing.Bitmap(imageNew); imageNew.Dispose(); imageNew = null; } else { qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸 imageNew.Dispose(); imageNew = null; break; } } #endregion //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸 #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸 while (image.Width > size && qrCodeEncoder.QRCodeScale > 1) { qrCodeEncoder.QRCodeScale--; System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content); image = new System.Drawing.Bitmap(imageNew); imageNew.Dispose(); imageNew = null; if (image.Width < size) { break; } } #endregion //根据参数设置二维码图片白边的最小宽度(按需缩小) #region 根据参数设置二维码图片白边的最小宽度 if (image.Width <= size && border > 0) { while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1) { qrCodeEncoder.QRCodeScale--; System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content); image = new System.Drawing.Bitmap(imageNew); imageNew.Dispose(); imageNew = null; } } #endregion //已经确认二维码图像,为图像染色修饰 if (true) { //定位点方块边长 int beSize = qrCodeEncoder.QRCodeScale * 3; int bep1_l = qrCodeEncoder.QRCodeScale * 2; int bep1_t = qrCodeEncoder.QRCodeScale * 2; int bep2_l = image.Width - qrCodeEncoder.QRCodeScale * 5 - 1; int bep2_t = qrCodeEncoder.QRCodeScale * 2; int bep3_l = qrCodeEncoder.QRCodeScale * 2; int bep3_t = image.Height - qrCodeEncoder.QRCodeScale * 5 - 1; int bep4_l = image.Width - qrCodeEncoder.QRCodeScale * 7 - 1; int bep4_t = image.Height - qrCodeEncoder.QRCodeScale * 7 - 1; System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(image); // Create solid brush. SolidBrush blueBrush = new SolidBrush(codeEyeColor); // Fill rectangle to screen. graphic0.FillRectangle(blueBrush, bep1_l, bep1_t, beSize, beSize); graphic0.FillRectangle(blueBrush, bep2_l, bep2_t, beSize, beSize); graphic0.FillRectangle(blueBrush, bep3_l, bep3_t, beSize, beSize); graphic0.FillRectangle(blueBrush, bep4_l, bep4_t, qrCodeEncoder.QRCodeScale, qrCodeEncoder.QRCodeScale); } //如果不需要解析,就可以取消下面的注释 //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置 #region 如果目标尺寸大于生成的图片尺寸,将二维码绘制在目标尺寸白色画布的中心位置 //if (image.Width < size) //{ // //新建空白绘图 // System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size); // System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel); // int p_left = 0; // int p_top = 0; // if (image.Width <= size) //如果原图比目标形状宽 // { // p_left = (size - image.Width) / 2; // } // if (image.Height <= size) // { // p_top = (size - image.Height) / 2; // } // //将生成的二维码图像粘贴至绘图的中心位置 // graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height); // image = new System.Drawing.Bitmap(panel); // panel.Dispose(); // panel = null; // graphic0.Dispose(); // graphic0 = null; //} #endregion } #endregion return image; } } }