string Name = ""; string imgFile = ""; if (prmember != null) { Name = prmember.Name; } string path = "/m-wap/HGProduct/ProductDetails?PID=" + prmember.ID + ""; string url = CreatUrl(path); ErcodeInfo info = new ErcodeInfo(); info.ID = id; info.Name = Name; info.Til = Name+"二维码"; info.URL = url; byte[] data = GenerRideCode.ShowImg(info); return File(data, "image/Png");
public class GenerRideCode { /// <summary> /// 转换成流的形式 /// </summary> /// <param name="matrix"></param> /// <returns></returns> public static Bitmap toBitmap(ByteMatrix matrix) { int width = matrix.Width; int height = matrix.Height; Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF")); } } return bmap; } public static string UpLoadImg(ErcodeInfo info, HttpServerUtilityBase Server1) { ByteMatrix byteMatrix = new MultiFormatWriter().encode(info.URL, BarcodeFormat.QR_CODE, 600, 700); Bitmap bitmap = GenerRideCode.toBitmap(byteMatrix); int width = bitmap.Width, height = bitmap.Height; Graphics g = Graphics.FromImage(bitmap); g.DrawImage(bitmap, 0, 0); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.DrawImage(bitmap, new Rectangle(0, 0, width, height), 0, 30, width, height, GraphicsUnit.Pixel); Font crFont = new Font("微软雅黑", 30, FontStyle.Bold); SizeF crSize = new SizeF(); string text = info.Name; crSize = g.MeasureString(text, crFont); //SolidBrush semiTransBrush = new SolidBrush(Color.Green); SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0)); //将原点移动 到图片中点 g.TranslateTransform((600 - crSize.Width) / 2, 580); //以原点为中心 转 -45度 g.RotateTransform(0); g.DrawString(text, crFont, semiTransBrush, new PointF(0, 0)); g.TranslateTransform(-(600 - crSize.Width) / 2, -580); crSize = g.MeasureString(info.Til, crFont); g.TranslateTransform((600 - crSize.Width) / 2, 630); g.DrawString(info.Til, crFont, semiTransBrush, new PointF(0, 0));//"产品展示二维码" string imgFile = "/Storage/UserImage/" + info.ID + ".jpg"; string tFullName = Server1.MapPath(imgFile); bitmap.Save(tFullName, System.Drawing.Imaging.ImageFormat.Jpeg); return imgFile; } public static byte[] ShowImg(ErcodeInfo info) { ByteMatrix byteMatrix = new MultiFormatWriter().encode(info.URL, BarcodeFormat.QR_CODE, 400, 459); Bitmap bitmap = GenerRideCode.toBitmap(byteMatrix); int width = bitmap.Width, height = bitmap.Height; Graphics g = Graphics.FromImage(bitmap); g.DrawImage(bitmap, 0, 0); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.DrawImage(bitmap, new Rectangle(0, 0, width, height), 0, 30, width, height, GraphicsUnit.Pixel); Font crFont = new Font("微软雅黑", 16, FontStyle.Bold); SizeF crSize = new SizeF(); string text = info.ID.ToString(); crSize = g.MeasureString(text, crFont); SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 0)); //将原点移动 到图片中点 g.TranslateTransform((400 - crSize.Width) / 2, 380); //以原点为中心 转 -45度 g.RotateTransform(0); g.DrawString(text, crFont, semiTransBrush, new PointF(0, 0)); g.TranslateTransform(-(400 - crSize.Width) / 2, -380); crSize = g.MeasureString(info.Til, crFont); g.TranslateTransform((400 - crSize.Width) / 2, 410); g.DrawString(info.Til, crFont, semiTransBrush, new PointF(0, 0)); //在本地生成二维码图片 //string filename = @"E:卓立信息备份generate1.png"; //bitmap.Save(filename, ImageFormat.Png); //用流的形式把图片显示在前台的img标签中 byte[] data; using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Png); data = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(data, 0, Convert.ToInt32(stream.Length)); } return data; } }
/// <summary> /// 生成二维码url /// </summary> /// <param name="path"></param> /// <returns></returns> private string CreatUrl(string path) { string AbsoluteUri; string domain; string allurl = Request.Url.ToString(); var xy = allurl.Split(':'); AbsoluteUri = xy[0]; domain = System.Web.HttpContext.Current.Request.Url.Host; int? port = Request.Url.Port; if (port != null && port != 80) { domain += ":" + port; } string url = AbsoluteUri + "://" + domain + path; return url; }