图片合成YFFotoMix

举报
清雨小竹 发表于 2022/09/25 01:58:56 2022/09/25
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。