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

     /// <summary>
            /// 生成带二维码的图片
            /// 所在目录下imgs目录 分为 八张切图
            /// 名称:imgTop、imgTopLeft、imgHeadPhoto、imgTopRight、imgIn、imgLeft、imgRight、imgBotton
            /// 格式:jpg
            /// </summary>
            /// <param name="qrcodeUri">二维码名称</param>
            /// <returns>生成的图片地址</returns>
            public string getQrCodeImg(string qrcodeUri,string where,int hasPhoto) 
            {
                //根据 邀请码 获取当前用户 昵称、头像
                BLL.sf_user_info userBll = new BLL.sf_user_info();
                Model.sf_user_info userInfo = userBll.GetModelByKey(qrcodeUri,where);
                System.Drawing.Image imgHeadPhoto = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgHeadPhoto.jpg"));
                int headwidth = imgHeadPhoto.Width;
                int headheight = imgHeadPhoto.Height;
                try
                {
                    if (!string.IsNullOrEmpty(userInfo.photoUri) && hasPhoto>0)
                    {
                        System.Net.WebRequest request = System.Net.WebRequest.Create(userInfo.photoUri);
                        System.Net.WebResponse response = request.GetResponse();
                        Stream reader = response.GetResponseStream();
                        if (reader != null)
                        {
                            imgHeadPhoto = System.Drawing.Image.FromStream(reader);
                        }
                        reader.Close();
                        reader.Dispose();
                    }
                }
                catch (Exception)
                {
                    
                }
                
                //根据 二维码资源 参数 获取图片对象
                System.Drawing.Image imgCode = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/code/" + qrcodeUri + ".jpg"));
                //从固定目录读取 图片所需切片
                System.Drawing.Image imgTop = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgTop.jpg"));
                System.Drawing.Image imgTopLeft = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgTopLeft.jpg"));
                System.Drawing.Image imgTopRight = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgTopRight.jpg"));
                System.Drawing.Image imgIn = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgIn.jpg"));
                System.Drawing.Image imgLeft = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgLeft.jpg"));
                System.Drawing.Image imgRight = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgRight.jpg"));
                System.Drawing.Image imgBotton = System.Drawing.Image.FromFile(Utils.GetMapPath(@"/allqrcode/imgs/imgBotton.jpg"));
                //创建 带二维码的图片 大小的 位图
                Bitmap tmpImage = new Bitmap(imgTop.Width, imgTop.Height + imgTopLeft.Height + imgIn.Height + imgLeft.Height + imgBotton.Height);
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(tmpImage);
    
                //绘制文字水印
                if (hasPhoto>0)
                {
                    System.Drawing.Graphics gs = System.Drawing.Graphics.FromImage(imgIn);
                    Brush red = new System.Drawing.Drawing2D.LinearGradientBrush(
                        new Rectangle(10, 20, 240, 30), Color.Red, Color.Red, 90);
                    gs.DrawString(userInfo.nickName, new Font("华文楷体", 25, FontStyle.Bold), red, new PointF(160, 33));
                    gs.Dispose();
                }
    
                //在同一位图上 绘制 不同的图片内容
                //绘制头部
                g.DrawImage(imgTop, 0, 0, imgTop.Width, imgTop.Height);
                //绘制头像这一行
                g.DrawImage(imgTopLeft,0, imgTop.Height, imgTopLeft.Width, imgTopLeft.Height);
                g.DrawImage(imgHeadPhoto, imgTopLeft.Width, imgTop.Height, headwidth, headheight);
                g.DrawImage(imgTopRight, imgTopLeft.Width + headwidth, imgTop.Height, imgTopRight.Width, imgTopRight.Height+4);
                //绘制中间
                g.DrawImage(imgIn, 0, imgTop.Height + imgTopLeft.Height, imgIn.Width, imgIn.Height);
                //绘制二维码这一行
                g.DrawImage(imgLeft, 0, imgTop.Height + imgTopLeft.Height + imgIn.Height, imgLeft.Width, imgLeft.Height);
                g.DrawImage(imgCode, imgLeft.Width, imgTop.Height + imgTopLeft.Height + imgIn.Height, imgLeft.Height, imgLeft.Height);
                g.DrawImage(imgRight, imgLeft.Width + imgLeft.Height+2, imgTop.Height + imgTopLeft.Height + imgIn.Height, imgRight.Width, imgRight.Height);
                //绘制底部
                g.DrawImage(imgBotton, 0, imgTop.Height + imgTopLeft.Height + imgIn.Height + imgLeft.Height, imgBotton.Width, imgBotton.Height);
                //释放资源 并保存要返回 位图
                imgTop.Dispose();
                imgLeft.Dispose();
                imgRight.Dispose();
                imgTopLeft.Dispose();
                imgTopRight.Dispose();
                imgIn.Dispose();
                imgBotton.Dispose();
                imgCode.Dispose();
                imgHeadPhoto.Dispose();
                string qrCodeImg = "/allqrcode/imgCode/" + qrcodeUri + ".jpg";
                tmpImage.Save(Utils.GetMapPath(@qrCodeImg));
                g.Dispose();
                tmpImage.Dispose();
                return qrCodeImg;
            }
  • 相关阅读:
    Merlin 的魔力: SpringLayout 管理器
    setOpaque(true);设置控件不透明
    运用 BoxLayout 进行 Swing 控件布局
    李洪强iOS开发本人集成环信的经验总结_02_基本配置
    李洪强iOS开发之-PCH文件的配置
    李洪强iOS开发本人集成环信的经验总结_01环信SDK的导入
    iOS开发UI篇—Quartz2D使用(矩阵操作)
    iOS开发UI篇—Quartz2D使用(图形上下文栈)
    iOS开发UI篇—Quartz2D简单使用(二)
    iOS开发UI篇—Quartz2D简单使用(一)
  • 原文地址:https://www.cnblogs.com/mchuang/p/6269444.html
Copyright © 2011-2022 走看看