zoukankan      html  css  js  c++  java
  • 生成二维码图片

    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;
            }
    

      

  • 相关阅读:
    自己奋斗才有用,人要坚持到成功为止
    自己需要的都是靠自己争取,人生只有自己才靠得住
    不如意也是要过日子,人是不可能和天斗的
    懂得满足也是好的,人要学会知足才会感到幸福
    不要让自己有后悔的时候,人都是要不负自己的青春年少
    ES6 の 块级作用域
    javascript中this的指向分析
    let & var 的区别
    npm 全局安装环境配置
    visibilitychange => 获取页面的可见性
  • 原文地址:https://www.cnblogs.com/daizhipeng/p/11133312.html
Copyright © 2011-2022 走看看