using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; namespace IStation.WinFrmUI.Basic { public class ImageWaterMarkHelper { #region 添加水印和标题 //添加水印 (计算位置) public static void AddLogoImage(string image_file, bool isWaterMarkLogo) { if (!System.IO.File.Exists(image_file)) return; var imgSource = Image.FromFile(image_file); if (imgSource == null) return; var bitMap = AddLogoImage(imgSource, isWaterMarkLogo); if (bitMap == null) return; imgSource.Dispose(); bitMap.Save(image_file); bitMap.Dispose(); } public static Image AddLogoImage(Image imgSource, bool isWaterMarkLogo) { string waterMarkLogoFile = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFile)) return imgSource; var width = imgSource.Width; var height = imgSource.Height; if (width < 200 || height < 60) { return imgSource; } try { if (IsIndexedPixelFormat(imgSource.PixelFormat)) { var bitMap = new Bitmap(width, height); bitMap.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); using (Graphics gh = Graphics.FromImage(bitMap)) { gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); DrawLogoByCalc(gh, bitMap.Width, bitMap.Height, waterMarkLogoFile); } return bitMap; } else { var bitMap = new Bitmap(imgSource); using (Graphics gh = Graphics.FromImage(bitMap)) { DrawLogoByCalc(gh, bitMap.Width, bitMap.Height, waterMarkLogoFile); } return bitMap; } } catch { return imgSource; } } //添加水印 (计算位置) /* public static Image AddLogoImage(Image imgSource, bool isWaterMarkLogo) { if (imgSource == null) return imgSource; try { var width = imgSource.Width; var height = imgSource.Height; if (width < 200 || height < 60) { return imgSource; } string waterMarkLogoFile = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFile)) return imgSource; //if (IsIndexedPixelFormat(imgSource.PixelFormat)) //{ var bmp = new Bitmap(width, height); bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); using (Graphics gh = Graphics.FromImage(bmp)) { gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); DrawLogoByCalc(gh, bmp.Width, bmp.Height, waterMarkLogoFile); } return bmp; //} //else //{ // var bmp = new Bitmap(width, height); // bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); // using (Graphics gh = Graphics.FromImage(bmp)) // { // gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; // gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); // CalcLogoImagePosi(gh, bmp.Width, bmp.Height, waterMarkLogoFile); // } // return bmp; // //using (Graphics gh = Graphics.FromImage(imgSource)) // //{ // // CalcLogoImagePosi(gh, imgSource.Width, imgSource.Height, waterMarkLogoFile); // //} // //return imgSource; //} } catch //(Exception ex) { return imgSource; } }*/ //添加水印(输入水印位置) public static void AddLogoImage(string image_file, List posiList, bool isWaterMarkLogo, float waterMarkImageRatio) { if (posiList == null || posiList.Count <= 0) { AddLogoImage(image_file, isWaterMarkLogo); return; } string waterMarkLogoFile = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFile)) return; var imgSource = Image.FromFile(image_file); var width = imgSource.Width; var height = imgSource.Height; if (width < 200 || height < 60) { return; } try { if (IsIndexedPixelFormat(imgSource.PixelFormat)) { var bitMap = new Bitmap(width, height); bitMap.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); using (Graphics gh = Graphics.FromImage(bitMap)) { gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); DrawLogoByPosi(gh, waterMarkLogoFile, posiList, waterMarkImageRatio); } bitMap.Save(image_file); bitMap.Dispose(); imgSource.Dispose(); } else { var bitMap = new Bitmap(imgSource); imgSource.Dispose(); using (Graphics gh = Graphics.FromImage(bitMap)) { DrawLogoByPosi(gh, waterMarkLogoFile, posiList, waterMarkImageRatio); } bitMap.Save(image_file); bitMap.Dispose(); } } catch { return; } } private static bool GetLogoFilePath(bool isWaterMarkLogo, out string waterMarkLogoFile) { waterMarkLogoFile = ""; if (isWaterMarkLogo) { return true; } else { return false; } } //添加水印(输入水印位置) public static Image AddLogoImage(Image imgSource, List posiList, bool isWaterMarkLogo, float waterMarkImageRatio) { if (posiList == null || posiList.Count <= 0) { return AddLogoImage(imgSource, isWaterMarkLogo); } if (imgSource == null) return imgSource; try { var width = imgSource.Width; var height = imgSource.Height; if (width < 200 || height < 60) { return imgSource; } string waterMarkLogoFile = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFile)) return imgSource; //if (IsIndexedPixelFormat(imgSource.PixelFormat)) //{ var bmp = new Bitmap(width, height); bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); using (Graphics gh = Graphics.FromImage(bmp)) { gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); DrawLogoByPosi(gh, waterMarkLogoFile, posiList, waterMarkImageRatio); } return bmp; //} //else //{ // var bmp = new Bitmap(width, height); // bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); // using (Graphics gh = Graphics.FromImage(bmp)) // { // gh.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; // gh.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // gh.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); // CalcLogoImagePosi(gh, bmp.Width, bmp.Height, waterMarkLogoFile); // } // return bmp; // //using (Graphics gh = Graphics.FromImage(imgSource)) // //{ // // CalcLogoImagePosi(gh, imgSource.Width, imgSource.Height, waterMarkLogoFile); // //} // //return imgSource; //} } catch //(Exception ex) { return imgSource; } } public static void AddLogoImage(Graphics gh, int ImageWidth, int ImageHeight, bool isWaterMarkLogo) { string waterMarkLogoFile = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFile)) return; try { DrawLogoByCalc(gh, ImageWidth, ImageHeight, waterMarkLogoFile); } catch //(Exception ex) { return; } } //通过计算 绘制LOGO private static void DrawLogoByCalc(Graphics gh, int ImageWidth, int ImageHeight, string waterMarkLogoFilePath) { using (var img_waterMark = Image.FromFile(waterMarkLogoFilePath)) { var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; if (ImageWidth <= waterMark_width || ImageHeight <= waterMark_height) { float waterMark_width2 = ImageWidth / 2.0f; float waterMark_ratio = waterMark_width2 / waterMark_width; var left_posi = (ImageWidth / 2 - waterMark_width2 / 2); DrawOneColumnLogo(gh, ImageHeight, left_posi, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); return; } if (ImageWidth > waterMark_width * 5) {//3列 float waterMark_width2 = ImageWidth / 5.0f; float waterMark_ratio = waterMark_width2 / waterMark_width; float space = waterMark_width2 * 0.5f; var x_posi1 = space; var x_posi2 = space + waterMark_width2 + space; var x_posi3 = space + waterMark_width2 + space + waterMark_width2 + space; DrawOneColumnLogo(gh, ImageHeight, x_posi1, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); DrawOneColumnLogo(gh, ImageHeight, x_posi2, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); DrawOneColumnLogo(gh, ImageHeight, x_posi3, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); } else if (ImageWidth > waterMark_width * 3.5) {//两列 float waterMark_width2 = ImageWidth / 3.5f; float waterMark_ratio = waterMark_width2 / waterMark_width; var space = waterMark_width2 * 0.5f; var x_posi1 = space; var x_posi2 = space + waterMark_width2 + space; DrawOneColumnLogo(gh, ImageHeight, x_posi1, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); DrawOneColumnLogo(gh, ImageHeight, x_posi2, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); } else {//一列 float waterMark_width2 = ImageWidth / 2.0f; float waterMark_ratio = waterMark_width2 / waterMark_width; var left_posi = (ImageWidth / 2 - waterMark_width2 / 2); DrawOneColumnLogo(gh, ImageHeight, left_posi, img_waterMark, waterMark_width, waterMark_height, waterMark_ratio); } } } //绘制一列 private static void DrawOneColumnLogo(Graphics gh, int ImageHeight, int left_posi, Image img_waterMark, int waterMark_width, int waterMark_height, float waterMark_ratio) { var list_y = CalcOneColumnLogoPosi(ImageHeight, waterMark_height, waterMark_ratio); for (int i = 0; i < list_y.Count; i++) { var top_posi = list_y[i]; var rect_2 = new RectangleF(left_posi, top_posi, waterMark_width, waterMark_height * waterMark_ratio); gh.DrawImage(img_waterMark, rect_2); } } private static void DrawOneColumnLogo(Graphics gh, int ImageHeight, float left_posi, Image img_waterMark, float waterMark_width, float waterMark_height, float waterMark_ratio) { var list_y = CalcOneColumnLogoPosi(ImageHeight, (int)waterMark_height, waterMark_ratio); for (int i = 0; i < list_y.Count; i++) { var top_posi = list_y[i]; var rect_2 = new RectangleF(left_posi, top_posi, waterMark_width * waterMark_ratio, waterMark_height * waterMark_ratio); gh.DrawImage(img_waterMark, rect_2); } } //计算一列的位置(等比例) private static List CalcOneColumnLogoPosi(int image_height, int waterMark_origin_height, float waterMark_ratio) { int space_height = 100; int top = 100; int bottom = 100; var waterMark_height = (int)(waterMark_ratio * waterMark_origin_height); if (waterMark_height > 250) { space_height = (int)(waterMark_height * 1.5); top = (int)(waterMark_height * 0.2); bottom = (int)(image_height - waterMark_height * 1.2); } else { space_height = (int)(waterMark_height * 1.8); top = (int)(waterMark_height * 0.5); bottom = (int)(image_height - waterMark_height * 1.5); } int num = (bottom - top) / space_height + 1; if (num <= 1) { space_height = (int)(waterMark_height * 1.2); top = (int)(waterMark_height * 0.2); bottom = image_height - waterMark_height - 5; } else if (num == 2) { space_height = (int)(waterMark_height * 1.3); top = (int)(waterMark_height * 0.3); bottom = image_height - waterMark_height - 5; } if (num > 5) {//每列最多5个 int space = (image_height - waterMark_height * 5) / 6; List posi = new List(); for (int i = 0; i < 6; i++) { var top_posi = space + (waterMark_height + space) * i; if (top_posi > image_height - waterMark_height) return posi; posi.Add(top_posi); } return posi; } else { List posi = new List(); for (int i = 0; i < 100; i++) { var top_posi = top + space_height * i; if (top_posi > bottom) return posi; posi.Add(top_posi); } return posi; } } //计算一列的位置(缩放水印) //private static List CalcOneColumnLogoPosi(int image_height, int waterMark_height, int waterMark_num, out double scale) //{ // scale = 1; // if (waterMark_num == 0) // return CalcOneColumnLogoPosi(image_height, waterMark_height, out scale); // double bl = 0.2;//间隙与图片高度的比例 // //每列最多5个 // double waterMark_height_scale = image_height * 1.0 / (waterMark_num * (1 + bl) + bl); // scale = waterMark_height_scale / waterMark_height; // List posi = new List(); // for (int i = 0; i < 100; i++) // { // var top_posi = (i * (1 + bl) + bl) * waterMark_height_scale; // if (top_posi > image_height) // return posi; // posi.Add((int)top_posi); // } // return posi; //} //通过位置 绘制LOGO private static void DrawLogoByPosi(Graphics gh, string waterMarkLogoFilePath, List posi_array, float waterMarkImageRatio) { using (var img_waterMark = Image.FromFile(waterMarkLogoFilePath)) { var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; for (int i = 0; i < posi_array.Count; i = i + 2) { int left_posi = posi_array[i]; int top_posi = posi_array[i + 1]; var rect_2 = new RectangleF(left_posi, top_posi, waterMark_width * waterMarkImageRatio, waterMark_height * waterMarkImageRatio); gh.DrawImage(img_waterMark, rect_2); } } } //计算位置 public static List CalcLogoImagePosi(int ImageWidth, int ImageHeight, bool isWaterMarkLogo, out string waterMarkLogoFilePath, out float waterMarkImageRatio) { waterMarkImageRatio = 1; waterMarkLogoFilePath = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFilePath)) return null; using (var img_waterMark = Image.FromFile(waterMarkLogoFilePath)) { var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; if (ImageWidth <= waterMark_width || ImageHeight <= waterMark_height) { return null; } var y_list = CalcOneColumnLogoPosi(ImageHeight, waterMark_height, waterMarkImageRatio); if (y_list == null || y_list.Count() == 0) return null; List all_posi = new List(); if (ImageWidth > waterMark_width * 5) {//3列 间隙是 0.5,1,0.5,1,0.5,1,0.5, float waterMark_width2 = ImageWidth / 5.0f; waterMarkImageRatio = waterMark_width2 * 0.1f / waterMark_width; var space = waterMark_width2 * 0.5; var x_posi1 = space; var x_posi2 = space + waterMark_width2 + space; var x_posi3 = space + waterMark_width2 + space + waterMark_width2 + space; foreach (var y in y_list) { all_posi.Add((int)x_posi1); all_posi.Add(y); all_posi.Add((int)x_posi2); all_posi.Add(y); all_posi.Add((int)x_posi3); all_posi.Add(y); } } else if (ImageWidth > waterMark_width * 3.5) {//两列 float waterMark_width2 = ImageWidth / 3.5f; waterMarkImageRatio = waterMark_width2 * 0.1f / waterMark_width; var space = waterMark_width2 * 0.5; var x_posi1 = space; var x_posi2 = space + waterMark_width2 + space; foreach (var y in y_list) { all_posi.Add((int)x_posi1); all_posi.Add(y); all_posi.Add((int)x_posi2); all_posi.Add(y); } } else {//一列 float waterMark_width2 = ImageWidth / 2.0f; waterMarkImageRatio = waterMark_width2 * 0.1f / waterMark_width; var x_posi1 = (ImageWidth / 2 - waterMark_width2 / 2); foreach (var y in y_list) { all_posi.Add((int)x_posi1); all_posi.Add(y); } } return all_posi; } } //计算位置 public static List CalcLogoImagePosiF(int ImageWidth, int ImageHeight, bool isWaterMarkLogo, out string waterMarkLogoFilePath, out float waterMark_ratio) { waterMark_ratio = 1; waterMarkLogoFilePath = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFilePath)) return null; using (var img_waterMark = Image.FromFile(waterMarkLogoFilePath)) { var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; if (ImageWidth <= waterMark_width || ImageHeight <= waterMark_height) { return null; } return CalcLogoImagePosiF(ImageWidth, ImageHeight, img_waterMark, out waterMark_ratio); } } //计算位置 public static List CalcLogoImagePosiF(int ImageWidth, int ImageHeight, Image img_waterMark, out float waterMark_ratio) { waterMark_ratio = 1; var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; if (ImageWidth <= waterMark_width || ImageHeight <= waterMark_height) { return null; } var y_list = CalcOneColumnLogoPosi(ImageHeight, waterMark_height, 1); if (y_list == null || y_list.Count() == 0) return null; List all_posi = new List(); if (ImageWidth > waterMark_width * 5) {//3列 var space = (ImageWidth - waterMark_width * 3) / 4; var x_posi1 = space; var x_posi2 = space + waterMark_width + space; var x_posi3 = space + waterMark_width + space + waterMark_width + space; foreach (var y in y_list) { all_posi.Add(new Rectangle(x_posi1, y, waterMark_width, waterMark_height)); all_posi.Add(new Rectangle(x_posi2, y, waterMark_width, waterMark_height)); all_posi.Add(new Rectangle(x_posi3, y, waterMark_width, waterMark_height)); } } else if (ImageWidth > waterMark_width * 2.5) {//两列 var space = (ImageWidth - waterMark_width * 2) / 3; var x_posi1 = space; var x_posi2 = space + waterMark_width + space; foreach (var y in y_list) { all_posi.Add(new Rectangle(x_posi1, y, waterMark_width, waterMark_height)); all_posi.Add(new Rectangle(x_posi2, y, waterMark_width, waterMark_height)); } } else {//一列 var x_posi1 = (ImageWidth / 2 - waterMark_width / 2); foreach (var y in y_list) { all_posi.Add(new Rectangle(x_posi1, y, waterMark_width, waterMark_height)); } } return all_posi; } //计算位置(排列2x2) public static List CalcLogoImagePosiF2x2(int ImageWidth, int ImageHeight, bool isWaterMarkLogo, out string waterMarkLogoFilePath) { waterMarkLogoFilePath = null; if (!GetLogoFilePath(isWaterMarkLogo, out waterMarkLogoFilePath)) return null; using (var img_waterMark = Image.FromFile(waterMarkLogoFilePath)) { var waterMark_width = img_waterMark.Width; var waterMark_height = img_waterMark.Height; if (ImageWidth <= waterMark_width || ImageHeight <= waterMark_height) { return null; } double bl = 0.2; double r_by_width = ImageWidth / (waterMark_width * (2 + 3 * bl)); double r_by_height = ImageHeight / (waterMark_height * (2 + 3 * bl)); double ratio = Math.Min(r_by_height, r_by_width); List all_posi = new List(); var space_width = (ImageWidth - waterMark_width * ratio * 2) / 3; var space_height = (ImageHeight - waterMark_height * ratio * 2) / 3; all_posi.Add(new Rectangle((int)space_width, (int)space_height, (int)(waterMark_width * ratio), (int)(waterMark_height * ratio))); all_posi.Add(new Rectangle((int)space_width, (int)(space_height * 2 + waterMark_height * ratio), (int)(waterMark_width * ratio), (int)(waterMark_height * ratio))); all_posi.Add(new Rectangle((int)(space_width * 2 + waterMark_width * ratio), (int)space_height, (int)(waterMark_width * ratio), (int)(waterMark_height * ratio))); all_posi.Add(new Rectangle((int)(space_width * 2 + waterMark_width * ratio), (int)(space_height * 2 + waterMark_height * ratio), (int)(waterMark_width * ratio), (int)(waterMark_height * ratio))); return all_posi; } } #endregion public static bool IsIndexedPixelFormat(System.Drawing.Imaging.PixelFormat imagePixelFormat) { PixelFormat[] pixelFormatArray = { PixelFormat.Format1bppIndexed ,PixelFormat.Format4bppIndexed ,PixelFormat.Format8bppIndexed ,PixelFormat.Undefined ,PixelFormat.DontCare ,PixelFormat.Format16bppArgb1555 ,PixelFormat.Format16bppGrayScale }; foreach (PixelFormat pf in pixelFormatArray) { if (imagePixelFormat == pf) { return true; } } return false; } #region 添加水印 代码备份 /// 原图 /// 水印文字 /// 文字块在图片中所占宽度比例 //public static Image AddWaterMark(Image imgSource, string textWaterMark, int widthPercent, Color colorWaterMark, ref string createStatus) //{ // if (imgSource == null) // return null; // try // { // var width = imgSource.Width; // var height = imgSource.Height; // if (width < 200 || height < 60) // { // createStatus = "图片过小不需要添加水印"; // return imgSource; // } // var bmp = new Bitmap(width, height); // bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); // using (Graphics g = Graphics.FromImage(bmp)) // using (Brush brush = new SolidBrush(colorWaterMark)) // { // g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; // g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // g.DrawImage(imgSource, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); // int[] sizes = { 50, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2 }; // System.Drawing.SizeF sizef = new SizeF(); // Font font = null; // for (int i = 0; i < sizes.Length; i++) // { // font = new Font("微软雅黑", sizes[i], FontStyle.Bold); // sizef = g.MeasureString(textWaterMark, font); // if ((ushort)sizef.Width < (ushort)(width * widthPercent / 100)) // break; // } // //StringFormat strFormat = new StringFormat(); // //strFormat.Alignment = System.Drawing.StringAlignment.Center; // //如果高度200,只添加一个水印 // if (height <= 200) // { // float xr = width / 2; // float yr = height * 0.5f; // float x0 = -sizef.Width / 2; // float y0 = -sizef.Height / 2; // g.ResetTransform(); // g.TranslateTransform(xr, yr); // g.RotateTransform(30); // g.DrawString(textWaterMark, font, brush, new PointF(x0, y0)); // } // //如果高度在200-400之间,添加两个水印 // else if (height <= 400 && height > 200) // { // float[] ps = { 0.35f, 0.65f }; // for (int i = 0; i < ps.Length; i++) // { // float xr = width / 2; // float yr = height * ps[i]; // float x0 = -sizef.Width / 2; // float y0 = -sizef.Height / 2; // g.ResetTransform(); // g.TranslateTransform(xr, yr); // g.RotateTransform(30); // g.DrawString(textWaterMark, font, brush, new PointF(x0, y0)); // } // } // //其他情况添加三个水印 // else // { // float[] ps = { 0.3f, 0.5f, 0.7f }; // for (int i = 0; i < ps.Length; i++) // { // float xr = width / 2; // float yr = height * ps[i]; // float x0 = -sizef.Width / 2; // float y0 = -sizef.Height / 2; // g.ResetTransform(); // g.TranslateTransform(xr, yr); // g.RotateTransform(30); // g.DrawString(textWaterMark, font, brush, new PointF(x0, y0)); // } // } // } // createStatus = null; // return bmp; // } // catch (Exception ex) // { // createStatus = ex.Message; // return imgSource; // } //} //public static Image AddWaterMark(Image imgSource, Image imgWaterMark, ref string createStatus) //{ // if (imgSource == null || imgWaterMark == null) // return null; // try // { // var source_image_width = imgSource.Width; // var source_image_height = imgSource.Height; // if (source_image_width < 200 || source_image_height < 60) // { // createStatus = "图片过小不需要添加水印"; // return imgSource; // } // if (source_image_width < imgWaterMark.Width || source_image_height < imgWaterMark.Height) // { // createStatus = "图片过小不需要添加水印"; // return imgSource; // } // //插入水印宽度和高度 // int water_mark_image_width = imgWaterMark.Width; // int water_mark_image_height = imgWaterMark.Height ; // //水印数量 // int water_image_number_x = (int)(source_image_width / (water_mark_image_width * 2.2)); // if (water_image_number_x < 0) // water_image_number_x = 1; // if (water_image_number_x > 3) // water_image_number_x = 3; // int water_image_number_y = (int)(source_image_height / (water_mark_image_height * 4.0)); // if (water_image_number_y < 0) // water_image_number_y = 1; // if (water_image_number_y > 3) // water_image_number_y = 3; // var bmp = new Bitmap(source_image_width, source_image_height); // bmp.SetResolution(imgSource.HorizontalResolution, imgSource.VerticalResolution); // using (Graphics g = Graphics.FromImage(bmp)) // { // g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; // g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // g.DrawImage(imgSource, new Rectangle(0, 0, source_image_width, source_image_height), 0, 0, source_image_width, source_image_height, GraphicsUnit.Pixel); // //添加水印 // for (int i = 0; i < water_image_number_x; i++) // { // for (int j = 0; j < water_image_number_y; j++) // { // Rectangle rt1 = new Rectangle( // source_image_width * (i + 1) / (water_image_number_x + 1) - water_mark_image_width / 2, // source_image_height * (j + 1) / (water_image_number_y + 1) - water_mark_image_height / 2, // water_mark_image_width, water_mark_image_height); // g.DrawImage(imgWaterMark, rt1); // } // } // } // createStatus = null; // return bmp; // } // catch (Exception ex) // { // createStatus = ex.Message; // return imgSource; // } //} #endregion #region 给某个系列的文件夹都加上水印 代码备份 //产生系列文件夹的水印图片,为空就是所有系列文件的图片都会生产 //public List CreateWaterMarkImage(string subFolder) //{ // var color = Color.FromArgb(60, Color.Blue); // string text = TProduct.GlobeParas.CorpName.ToString(); // string rootFolder = System.IO.Path.Combine(TProduct.GlobeParas.DataFolder, subFolder); // List statusInfo = new List(); // CreateWaterMarkImage1(rootFolder, text, color, ref statusInfo); // return statusInfo; //} //private void CreateWaterMarkImage1(string rootFolder, string text, Color color, ref List statusInfo) //{ // string[] dirs = Directory.GetDirectories(rootFolder); // foreach (string dir in dirs) // { // CreateWaterMarkImage1(dir, text, color, ref statusInfo); // } // string[] files = Directory.GetFiles(rootFolder); // foreach (string file in files) // { // try // { // var ext = Path.GetExtension(file); // if (!ext.Contains("png")) // { // continue; // } // string watermarkImgPath = file.Replace(".png", "_wm.png"); // if (System.IO.File.Exists(watermarkImgPath)) // { // System.IO.File.Delete(watermarkImgPath); // } // System.Drawing.Image imgage = System.Drawing.Image.FromFile(file); // string createStatus = null; // var iamge2 = TProduct.Common.ImageHelper.AddWaterMark(imgage, text, 8, color, ref createStatus); // if (string.IsNullOrEmpty(createStatus) && iamge2 != null) // { // iamge2.Save(watermarkImgPath); // iamge2.Dispose(); // } // imgage.Dispose(); // } // catch (Exception ex) // { // statusInfo.Add(string.Format("{0} 失败,原因:{1}", file, ex.Message)); // continue; // } // } //} #endregion } }