图片合成YFFotoMix
        【摘要】 
                    using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Text;using System.IO;using System.Linq;using System.Net;using System.Web;using YF...
    
    
    
    
  
   - 
    
     
    
    
     
      using System;
     
    
- 
    
     
    
    
     
      using System.Collections.Generic;
     
    
- 
    
     
    
    
     
      using System.Drawing;
     
    
- 
    
     
    
    
     
      using System.Drawing.Text;
     
    
- 
    
     
    
    
     
      using System.IO;
     
    
- 
    
     
    
    
     
      using System.Linq;
     
    
- 
    
     
    
    
     
      using System.Net;
     
    
- 
    
     
    
    
     
      using System.Web;
     
    
- 
    
     
    
    
     
      using YFAPICommon.Controllers;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      namespace YFAPICommon.Libs
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
         public class YFFotoMix
     
    
- 
    
     
    
    
     
          {
     
    
- 
    
     
    
    
             private static string serverPath = System.Configuration.ConfigurationSettings.AppSettings["serverPath"];
     
    
- 
    
     
    
    
             private static string localPath = System.Configuration.ConfigurationSettings.AppSettings["localPath"];
     
    
- 
    
     
    
    
             /// <summary>
     
    
- 
    
     
    
    
             /// 合成用户分享图片
     
    
- 
    
     
    
    
             /// </summary>
     
    
- 
    
     
    
    
             /// <returns></returns>
     
    
- 
    
     
    
    
             public static string CombinUserShareImg(string str,string imgUrl,string wxPath,string fileName)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
                 const string folderPath = "\\shareimg\\";
     
    
- 
    
     
    
    
                 const string serverFolderPath = "/shareimg/";
     
    
- 
    
     
    
    
                 string folder = localPath + folderPath;
     
    
- 
    
     
    
    
                 //判断文件的存在
     
    
- 
    
     
    
    
                 if (System.IO.File.Exists(Path.Combine(folder, fileName+".jpg")))
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
                     //存在文件
     
    
- 
    
     
    
    
                     return serverPath + serverFolderPath + fileName + ".jpg";
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
                 
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  Image img1 = Image.FromFile(Path.Combine(folder, "sharetemp1.jpg"));//相框图片 
     
    
- 
    
     
    
    
     
                  Image img2 = DrawTransparentRoundCornerImage(downloadImage(imgUrl),30); //照片图片 
     
    
- 
    
     
    
    
     
                  Image wxQrCode = DrawTransparentRoundCornerImage(WXController.getWXCodeImage(wxPath));
     
    
- 
    
     
    
    
                 //从指定的System.Drawing.Image创建新的System.Drawing.Graphics 
     
    
- 
    
     
    
    
     
                  Graphics g = Graphics.FromImage(img1);
     
    
- 
    
     
    
    
     
                  g.DrawImage(img1, 0, 0, img1.Size.Width, img1.Size.Height);// g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);
     
    
- 
    
     
    
    
                                                                            //g.FillRectangle(System.Drawing.Brushes.Black, 16, 16, (int)112 + 2, ((int)73 + 2));//相片四周刷一层黑色边框
     
    
- 
    
     
    
    
                                                                            //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);
     
    
- 
    
     
    
    
     
                  g.DrawImage(img2, 75, 243, 650, 838);//户型图
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  g.DrawImage(wxQrCode, 540, 1175, 200, 200);//小程序二维码
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 //************************************
     
    
- 
    
     
    
    
     
                  g.TextRenderingHint = TextRenderingHint.AntiAlias;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  FontFamily fontFamily = new FontFamily("黑体");
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  Font font1 = new Font(fontFamily, 28f, FontStyle.Regular, GraphicsUnit.Pixel);
     
    
- 
    
     
    
    
                 string poem1 = str;
     
    
- 
    
     
    
    
     
                  g.DrawString(poem1, font1, Brushes.White, 70, 1320);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 //************************************
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  GC.Collect();
     
    
- 
    
     
    
    
     
                  img1.Save(Path.Combine(folder, fileName + ".jpg"));
     
    
- 
    
     
    
    
     
                  img1.Dispose();
     
    
- 
    
     
    
    
                 return serverPath+ serverFolderPath+ fileName + ".jpg";
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             public static string CombinUserShareImg2(string wxPath, string fileName)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
                 const string folderPath = "\\shareimg\\";
     
    
- 
    
     
    
    
                 const string serverFolderPath = "/shareimg/";
     
    
- 
    
     
    
    
                 string folder = localPath + folderPath;
     
    
- 
    
     
    
    
                 //判断文件的存在
     
    
- 
    
     
    
    
                 if (System.IO.File.Exists(Path.Combine(folder, fileName + ".jpg")))
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
                     //存在文件
     
    
- 
    
     
    
    
                     return serverPath + serverFolderPath + fileName + ".jpg";
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  Image img1 = Image.FromFile(Path.Combine(folder, "sharetemp2.jpg"));//相框图片 
     
    
- 
    
     
    
    
                  
     
    
- 
    
     
    
    
     
                  Image wxQrCode = DrawTransparentRoundCornerImage(WXController.getWXCodeImage(wxPath));
     
    
- 
    
     
    
    
                 //从指定的System.Drawing.Image创建新的System.Drawing.Graphics 
     
    
- 
    
     
    
    
     
                  Graphics g = Graphics.FromImage(img1);
     
    
- 
    
     
    
    
     
                  g.DrawImage(img1, 0, 0, img1.Size.Width, img1.Size.Height);// g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);
     
    
- 
    
     
    
    
                                                                            //g.FillRectangle(System.Drawing.Brushes.Black, 16, 16, (int)112 + 2, ((int)73 + 2));//相片四周刷一层黑色边框
     
    
- 
    
     
    
    
                                                                            //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  g.DrawImage(wxQrCode, 590, 1225, 160, 160);//小程序二维码
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 //************************************
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  GC.Collect();
     
    
- 
    
     
    
    
     
                  img1.Save(Path.Combine(folder, fileName + ".jpg"));
     
    
- 
    
     
    
    
     
                  img1.Dispose();
     
    
- 
    
     
    
    
                 return serverPath + serverFolderPath + fileName + ".jpg";
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             //图片处理为圆角
     
    
- 
    
     
    
    
             private static System.Drawing.Image DrawTransparentRoundCornerImage(System.Drawing.Image image,int radius)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
     
                  Bitmap bm = new Bitmap(image.Width, image.Height);
     
    
- 
    
     
    
    
     
                  Graphics g = Graphics.FromImage(bm);
     
    
- 
    
     
    
    
     
                  g.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, image.Width, image.Height));
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 using (System.Drawing.Drawing2D.GraphicsPath path = CreateRoundedRectanglePath(new Rectangle(0, 0, image.Width, image.Height), radius))
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
     
                      g.SetClip(path);
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
     
    
- 
    
     
    
    
     
                  g.Dispose();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 return bm;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             //图片处理为圆形
     
    
- 
    
     
    
    
             private static System.Drawing.Image DrawTransparentRoundCornerImage(System.Drawing.Image image)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
     
                  Bitmap bm = new Bitmap(image.Width, image.Height);
     
    
- 
    
     
    
    
     
                  Graphics g = Graphics.FromImage(bm);
     
    
- 
    
     
    
    
     
                  g.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, image.Width, image.Height));
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 using (System.Drawing.Drawing2D.GraphicsPath path = CreateRoundedRectanglePath(new Rectangle(0, 0, image.Width, image.Height), image.Width / 2))
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
     
                      g.SetClip(path);
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
     
    
- 
    
     
    
    
     
                  g.Dispose();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 return bm;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             //设置图片四个边角弧度
     
    
- 
    
     
    
    
             private static System.Drawing.Drawing2D.GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
     
                  System.Drawing.Drawing2D.GraphicsPath roundedRect = new System.Drawing.Drawing2D.GraphicsPath();
     
    
- 
    
     
    
    
     
                  roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
     
    
- 
    
     
    
    
     
                  roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
     
    
- 
    
     
    
    
     
                  roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
     
    
- 
    
     
    
    
     
                  roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
     
    
- 
    
     
    
    
     
                  roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
     
    
- 
    
     
    
    
     
                  roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
     
    
- 
    
     
    
    
     
                  roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
     
    
- 
    
     
    
    
     
                  roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
     
    
- 
    
     
    
    
     
                  roundedRect.CloseFigure();
     
    
- 
    
     
    
    
                 return roundedRect;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             private static Image downloadImage(string url)
     
    
- 
    
     
    
    
     
              {
     
    
- 
    
     
    
    
     
                  WebRequest imgRequest = WebRequest.Create(url);
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                  HttpWebResponse res;
     
    
- 
    
     
    
    
                 try
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
     
                      res = (HttpWebResponse)imgRequest.GetResponse();
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
                 catch (WebException ex)
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
                      res = (HttpWebResponse)ex.Response;
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 if (res.StatusCode.ToString() == "OK")
     
    
- 
    
     
    
    
     
                  {
     
    
- 
    
     
    
    
     
                      System.Drawing.Image downImage = System.Drawing.Image.FromStream(imgRequest.GetResponse().GetResponseStream());
     
    
- 
    
     
    
    
                     return downImage;
     
    
- 
    
     
    
    
     
                  }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
                 return null;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
     
      }
     
    
 
 
文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。
原文链接:zzzili.blog.csdn.net/article/details/115328463
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
            
 
           
评论(0)