图片添加文字或者图片水印

  /// <summary>
        /// 生成模版
        /// </summary>
        /// <param name="backgroundpath">背景图片地址</param>
        /// <param name="saveFile">生成模版图片地址</param>
        /// <param name="width">模版宽带</param>
        /// <param name="height">模版高度</param>
        /// <param name="waterInfos">水印信息</param>
        /// <returns></returns>
        public static bool CreatePicTemple(string backgroundpath, ref string saveFile, List<WaterInfo> waterInfos = null, int width = 0, int height = 0)
        {
            try
            {
                //1.读取背景图片
                //2.缩放高宽
                //3.读取水印图片 或者文字
                //4.画图 
                string filebackgroundpath = System.Web.HttpContext.Current.Server.MapPath(backgroundpath);
                Image imgagephoto = Image.FromFile(filebackgroundpath);
                if (width != 0 && height != 0 && (imgagephoto.Width != width || imgagephoto.Height != height))
                {
                    var fi = new FileInfo(filebackgroundpath);
                    string thumbnailname = fi.Name.Split('.')[0] + "_thumbnail" + fi.Extension;
                    string thumbnaipath = fi.DirectoryName + "\\" + thumbnailname;
                    UploadCommon.MakeThumbnail(filebackgroundpath, thumbnaipath, width, height, "A");
                    filebackgroundpath = thumbnaipath;
                }
                imgagephoto = Image.FromFile(filebackgroundpath);
                if (waterInfos != null && waterInfos.Count > 0)
                {
                    Graphics g = Graphics.FromImage(imgagephoto);  //创建画布
                    waterInfos.ForEach(c =>
                    {
                        switch (c.WaterType)
                        {
                            case EnumWaterType.Word:
                                FontTextStyle fontTextStyle;
                                if (!string.IsNullOrWhiteSpace(c.IFoinTextStyle))
                                {
                                    fontTextStyle = Newtonsoft.Json.JsonConvert.DeserializeObject<FontTextStyle>(c.IFoinTextStyle);
                                    if (fontTextStyle != null)
                                    {
                                        fontTextStyle.FamilyName = fontTextStyle.FamilyName ?? "微软雅黑";
                                        fontTextStyle.FontSize = fontTextStyle.FontSize ?? 12;
                                        fontTextStyle.iFontStyle = fontTextStyle.iFontStyle ?? FontStyle.Regular;
                                        fontTextStyle.iColor = fontTextStyle.iColor ?? Color.Black;
                                    }
                                }
                                else
                                {
                                    fontTextStyle = new FontTextStyle()
                                   {
                                       FamilyName = "微软雅黑",
                                       FontSize = 12,
                                       iFontStyle = FontStyle.Regular,
                                       iColor = Color.Black
                                   };
                                }
                                var drawFont = new Font(fontTextStyle.FamilyName, (int)fontTextStyle.FontSize, (FontStyle)fontTextStyle.iFontStyle);
                                g.DrawString(c.WaterMarkText, drawFont, new SolidBrush((Color)fontTextStyle.iColor), c.WaterPoint);
                                break;
                            case EnumWaterType.Pic:
                                Image waterimage = Image.FromFile(c.PicPath);
                                PicStyle picStyle;
                                if (!string.IsNullOrWhiteSpace(c.IPicStyle))
                                {
                                    //设置图片样式
                                    picStyle = Newtonsoft.Json.JsonConvert.DeserializeObject<PicStyle>(c.IPicStyle);
                                    if (picStyle != null)
                                    {
                                        picStyle.Width = picStyle.Width ?? waterimage.Width;
                                        picStyle.Height = picStyle.Height ?? waterimage.Height;
                                    }
                                    else
                                    {
                                        picStyle = new PicStyle
                                        {
                                            Width = waterimage.Width,
                                            Height = waterimage.Height
                                        };
                                    }
                                }
                                else
                                {
                                    picStyle = new PicStyle
                                    {
                                        Width = waterimage.Width,
                                        Height = waterimage.Height
                                    };
                                }
                                Image imgWatermark = new Bitmap(waterimage, (int)picStyle.Width, (int)picStyle.Height);
                                g.DrawImage(imgWatermark, c.WaterPoint);
                                break;
                        }
                    });
                    g.Dispose();
                    string saveFilePath = System.Web.HttpContext.Current.Server.MapPath(saveFile);
                    var savePathDir = saveFilePath.Replace(Path.GetFileName(saveFilePath), "");  //要保存的图片二维码目录
                    //判断目录 不存在 创建
                    if (!string.IsNullOrWhiteSpace(savePathDir))
                    {
                        try
                        {
                            if (!Directory.Exists(savePathDir))
                            {
                                Directory.CreateDirectory(savePathDir);
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                        imgagephoto.Save(saveFilePath);
                        imgagephoto.Dispose();
                    }
                }
                return true;
            }

            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 水印信息
        /// </summary>
        public class WaterInfo
        {
            //水印类型 
            public EnumWaterType WaterType { get; set; }
            /// <summary>
            /// 水印坐标
            /// </summary>
            public PointF WaterPoint { get; set; }
            /// <summary>
            /// 文字水印 内容
            /// </summary>
            public string WaterMarkText { get; set; }
            /// <summary>
            /// 文字水印样式
            /// </summary>
            public string IFoinTextStyle { get; set; }
            /// <summary>
            /// 图片水印地址
            /// </summary>
            public string PicPath { get; set; }
            /// <summary>
            /// 图片使用样式
            /// </summary>
            public string IPicStyle { get; set; }
        }

        // 水印类型  Word-文字  Pic-图片
        public enum EnumWaterType
        {
            Word,
            Pic
        }
        /// <summary>
        /// 字体样式设置
        /// </summary>
        private class FontTextStyle
        {
            //字体
            public string FamilyName { get; set; }
            //文字大小
            public int? FontSize { get; set; }
            //字体样式
            public FontStyle? iFontStyle { get; set; }

            //文字颜色
            public Color? iColor { get; set; }

        }

        /// <summary>
        /// 图片属性
        /// </summary>
        private class PicStyle
        {
            //图片宽度
            public int? Width { get; set; }
            //图片高度
            public int? Height { get; set; }
        }
    }

 

posted @ 2022-05-26 11:29  ★Angel★  阅读(109)  评论(0编辑  收藏  举报