public static void AddPic(string Path, string Path_syp, string Path_sypf, WaterPosition waterPosition) { Image image = Image.FromFile(Path); Image image2 = Image.FromFile(Path_sypf); Graphics graphics = Graphics.FromImage(image); int x = 0; int y = 0; ImageWater.GetPosition(image, image2, out x, out y, waterPosition); graphics.DrawImage(image2, new Rectangle(x, y, image2.Width, image2.Height), 0, 0, image2.Width, image2.Height, GraphicsUnit.Pixel); graphics.Dispose(); image.Save(Path_syp); image.Dispose(); }
public static void AddPic(string filePaths, string waterFile, WaterPosition waterPosition) { int num = filePaths.LastIndexOf("."); string strA = filePaths.Substring(num, filePaths.Length - num); if (string.Compare(strA, ".gif", true) == 0) { return; } int num2 = 25; Image image = null; Image image2 = null; Graphics graphics = null; try { image = Image.FromFile(filePaths, true); image2 = Image.FromFile(waterFile, true); graphics = Graphics.FromImage(image); int x = 0; int y = 0; ImageWater.GetPosition(image, image2, out x, out y, waterPosition); float[][] array = new float[5][]; float[][] arg_86_0 = array; int arg_86_1 = 0; float[] array2 = new float[5]; array2[0] = 1f; arg_86_0[arg_86_1] = array2; float[][] arg_9D_0 = array; int arg_9D_1 = 1; float[] array3 = new float[5]; array3[1] = 1f; arg_9D_0[arg_9D_1] = array3; float[][] arg_B4_0 = array; int arg_B4_1 = 2; float[] array4 = new float[5]; array4[2] = 1f; arg_B4_0[arg_B4_1] = array4; float[][] arg_C8_0 = array; int arg_C8_1 = 3; float[] array5 = new float[5]; array5[3] = (float)num2; arg_C8_0[arg_C8_1] = array5; array[4] = new float[] { 0f, 0f, 0f, 0f, 1f }; float[][] newColorMatrix = array; ColorMatrix newColorMatrix2 = new ColorMatrix(newColorMatrix); ImageAttributes imageAttributes = new ImageAttributes(); imageAttributes.SetColorMatrix(newColorMatrix2, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); graphics.DrawImage(image2, new Rectangle(x, y, image2.Width, image2.Height), 0, 0, image2.Width, image2.Height, GraphicsUnit.Pixel, imageAttributes); FileInfo fileInfo = new FileInfo(filePaths); ImageFormat format = ImageFormat.Gif; string key; switch (key = fileInfo.Extension.ToLower()) { case ".jpg": format = ImageFormat.Jpeg; break; case ".gif": format = ImageFormat.Gif; break; case ".png": format = ImageFormat.Png; break; case ".bmp": format = ImageFormat.Bmp; break; case ".tif": format = ImageFormat.Tiff; break; case ".wmf": format = ImageFormat.Wmf; break; case ".ico": format = ImageFormat.Icon; break; } MemoryStream memoryStream = new MemoryStream(); image.Save(memoryStream, format); byte[] array6 = memoryStream.ToArray(); image.Dispose(); image2.Dispose(); graphics.Dispose(); File.Delete(filePaths); FileStream fileStream = new FileStream(filePaths, FileMode.Create, FileAccess.Write); if (fileStream != null) { fileStream.Write(array6, 0, array6.Length); fileStream.Close(); } } finally { try { image2.Dispose(); image.Dispose(); graphics.Dispose(); } catch { } } }
private static void GetPosition(Image image, Image copyImage, out int x, out int y, WaterPosition waterPosition) { switch (waterPosition) { case WaterPosition.TOP: x = (image.Width - copyImage.Width) / 2; y = 0; return; case WaterPosition.CENTER: x = (image.Width - copyImage.Width) / 2; y = (image.Height - copyImage.Height) / 2; return; case WaterPosition.LEFT: x = 0; y = (image.Height - copyImage.Height) / 2; return; case WaterPosition.LEFTUPCORNER: x = 0; y = 0; return; case WaterPosition.LEFTBOMCORNER: x = 0; y = image.Height - copyImage.Height; return; case WaterPosition.RIGHT: x = image.Width - copyImage.Width; y = (image.Height - copyImage.Height) / 2; return; case WaterPosition.RIGHTUPCORNER: x = image.Width - copyImage.Width; y = 0; return; case WaterPosition.RIGHTBOMCORNER: x = image.Width - copyImage.Width; y = image.Height - copyImage.Height; return; case WaterPosition.BOTTOM: x = (image.Width - copyImage.Width) / 2; y = image.Height - copyImage.Height; return; default: x = image.Width - copyImage.Width; y = image.Height - copyImage.Height; return; } }
/// <summary> /// 在图片上生成图片水印 create by kouzp 2014-02-13 /// </summary> /// <param name="imagePath">原图片路径</param> /// <param name="savePath">加水印后图片保存路径</param> /// <param name="waterPicPath">水印图片路径</param> /// <param name="position">水印位置</param> /// <param name="alpha">水印透明度</param> public static void AddWaterPic(string imagePath, string savePath, string waterPicPath, WaterPosition position = WaterPosition.RigthBottom, double alpha = 0.3) { System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath); System.Drawing.Image copyImage = System.Drawing.Image.FromFile(waterPicPath); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); g.SmoothingMode = SmoothingMode.AntiAlias; //与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率 Bitmap bmPhoto = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); // 定义一个绘图画面用来装载位图 Graphics grPhoto = Graphics.FromImage(bmPhoto); //同样,由于水印是图片,我们也需要定义一个Image来装载它 System.Drawing.Image imgWatermark = new Bitmap(waterPicPath); grPhoto.SmoothingMode = SmoothingMode.AntiAlias; // 第一次描绘,将我们的底图描绘在绘图画面上 grPhoto.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); Bitmap bmWatermark = new Bitmap(bmPhoto); bmWatermark.SetResolution(image.HorizontalResolution, image.VerticalResolution); // 继续,将水印图片装载到一个绘图画面grWatermark Graphics grWatermark = Graphics.FromImage(bmWatermark); //ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。 ImageAttributes imageAttributes = new ImageAttributes(); //Colormap: 定义转换颜色的映射 ColorMap colorMap = new ColorMap(); //我的水印图被定义成拥有绿色背景色的图片被替换成透明 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, // red红色 new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, //green绿色 new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, //blue蓝色 new float[] { 0.0f, 0.0f, 0.0f, (float)alpha, 0.0f }, //透明度 new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; // // ColorMatrix:定义包含 RGBA 空间坐标的 5 x 5 矩阵。 // ImageAttributes 类的若干方法通过使用颜色矩阵调整图像颜色。 ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); //上面设置完颜色,下面开始设置位置 int rectX; int rectY; #region 水印位置 switch (position) { case WaterPosition.BottomMiddle: rectX = image.Width / 2; rectY = image.Height - copyImage.Height - 10; break; case WaterPosition.Center: rectX = image.Width / 2; rectY = image.Height / 2; break; case WaterPosition.LeftBottom: rectX = copyImage.Width; rectY = image.Height - copyImage.Height - 10; break; case WaterPosition.LeftTop: rectX = copyImage.Width / 2; rectY = copyImage.Height / 2; break; case WaterPosition.RightTop: rectX = image.Width - copyImage.Width - 10; rectY = copyImage.Height; break; case WaterPosition.RigthBottom: rectX = image.Width - copyImage.Width - 10; rectY = image.Height - copyImage.Height - 10; break; case WaterPosition.TopMiddle: rectX = image.Width / 2; rectY = copyImage.Width; break; default: rectX = copyImage.Width; rectY = image.Height - copyImage.Height - 10; break; } #endregion //第二次绘图,把水印印上去 imgWatermark = new Bitmap(waterPicPath); grWatermark.DrawImage(imgWatermark, new Rectangle(rectX, rectY, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel, imageAttributes); image = bmWatermark; grWatermark.Dispose(); g.Dispose(); string dirPath = savePath.Substring(0, savePath.LastIndexOf('/')); DirectoryInfo dir = new DirectoryInfo(dirPath); if (!dir.Exists) { dir.Create(); } image.Save(savePath); image.Dispose(); }
/// <summary> /// 在图片上增加文字水印 create by kouzp 2014-02-13 /// </summary> /// <param name="imagePath">原图片路径</param> /// <param name="savePath">加水印后图片保存路径</param> /// <param name="waterText">水印文字</param> /// <param name="position">水印位置</param> /// <param name="alpha">水印透明度</param> public static void AddWaterText(string imagePath, string savePath, string waterText = "格男仕", WaterPosition position = WaterPosition.RigthBottom, double alpha = 0.3) { System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); g.SmoothingMode = SmoothingMode.AntiAlias; g.DrawImage(image, 0, 0, image.Width, image.Height); //根据图片的大小我们来确定添加上去的文字的大小 //在这里我们定义一个数组来确定 int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 }; //字体 Font crFont = null; //矩形的宽度和高度,SizeF有三个属性,分别为Height高,width宽,IsEmpty是否为空 SizeF crSize = new SizeF(); //利用一个循环语句来选择我们要添加文字的型号 //直到它的长度比图片的宽度小 for (int i = 0; i < 7; i++) { crFont = new Font("arial", sizes[i], FontStyle.Bold); //测量用指定的 Font 对象绘制并用指定的 StringFormat 对象格式化的指定字符串。 crSize = g.MeasureString(waterText, crFont); // ushort 关键字表示一种整数数据类型 if ((ushort)crSize.Width < (ushort)image.Width) { break; } } //下面定义一个矩形区域,以后在这个矩形里画上白底黑字 float rectX = 0; float rectY = 0; float rectWidth = crSize.Width; float rectHeight = crSize.Height; #region 水印位置 switch (position) { case WaterPosition.BottomMiddle: rectX = image.Width / 2; rectY = image.Height - rectHeight - 10; break; case WaterPosition.Center: rectX = image.Width / 2; rectY = image.Height / 2; break; case WaterPosition.LeftBottom: rectX = rectWidth; rectY = image.Height - rectHeight - 10; break; case WaterPosition.LeftTop: rectX = rectWidth / 2; rectY = rectHeight / 2; break; case WaterPosition.RightTop: rectX = image.Width - rectWidth - 10; rectY = rectHeight; break; case WaterPosition.RigthBottom: rectX = image.Width - rectWidth - 10; rectY = image.Height - rectHeight - 10; break; case WaterPosition.TopMiddle: rectX = image.Width / 2; rectY = rectWidth; break; default: rectX = rectWidth; rectY = image.Height - rectHeight - 10; break; } #endregion //声明矩形域 RectangleF textArea = new RectangleF(rectX, rectY, rectWidth, rectHeight); Font font = crFont; //定义字体 int m_alpha = Convert.ToInt32(256 * alpha); //这个画笔为描绘阴影的画笔,呈灰色 Brush whiteBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255)); //笔刷,画文字用 Brush blackBrush = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0)); //笔刷,画背景用 //g.FillRectangle(blackBrush, rectX, rectY, rectWidth, rectHeight);//背景 RectangleF backArea = new RectangleF(rectX + 1, rectY + 1, rectWidth, rectHeight);//背景 g.DrawString(waterText, font, blackBrush, backArea); g.DrawString(waterText, font, whiteBrush, textArea); g.Dispose(); string dirPath = savePath.Substring(0, savePath.LastIndexOf('/')); DirectoryInfo dir = new DirectoryInfo(dirPath); if (!dir.Exists) { dir.Create(); } image.Save(savePath); image.Dispose(); }
/// <summary> /// 图片添加文字水印 /// </summary> /// <param name="image">图片</param> /// <param name="text">文字内容</param> /// <param name="fontFamily">字体</param> /// <param name="emSize">字体大小px</param> /// <param name="fontColor">字体颜色,:#ffffff</param> /// <param name="position">位置</param> /// <param name="opacity">透明度:1-100</param> /// <returns></returns> public static Image WaterMarkText(Image image, string text, string fontFamily, int emSize, string fontColor, WaterPosition position, int opacity) { return(AddWaterText(image, text, fontFamily, emSize, fontColor, position, opacity, 0)); }
/// <summary> /// 图片添加水印 /// </summary> /// <param name="image"></param> /// <param name="watermark">水印图片</param> /// <param name="position">位置</param> /// <param name="opacity">透明度。1-100,越小透越透明</param> /// <returns></returns> public static Image AddWaterPic(Image image, Image watermark, WaterPosition position, int opacity) { //如果水印图片大于图片,则不添加水印 if (watermark.Height >= image.Height || watermark.Width >= image.Width) { return(image); } using (Graphics g = Graphics.FromImage(image)) { ImageAttributes imageAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(255, 0, 255, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float transparency = 0.5F; if (opacity >= 1 && opacity <= 100) { transparency = (opacity / 100.0F); } float[][] colorMatrixElements = { new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, transparency, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int xpos = 0; int ypos = 0; switch (position) { case WaterPosition.左上: xpos = (int)(image.Width * (float).01); ypos = (int)(image.Height * (float).01); break; case WaterPosition.中上: xpos = ((int)(image.Width * (float).50) - (watermark.Width / 2)); ypos = (int)(image.Height * (float).01); break; case WaterPosition.右上: xpos = ((int)(image.Width * (float).99) - watermark.Width); ypos = (int)(image.Height * (float).01); break; case WaterPosition.左中: xpos = (int)(image.Width * (float).01); ypos = (int)((image.Height * (float).50) - (watermark.Height / 2)); break; case WaterPosition.中中: xpos = (int)((image.Width * (float).50) - (watermark.Width / 2)); ypos = (int)((image.Height * (float).50) - (watermark.Height / 2)); break; case WaterPosition.右中: xpos = (int)((image.Width * (float).99) - watermark.Width); ypos = (int)((image.Height * (float).50) - (watermark.Height / 2)); break; case WaterPosition.左下: xpos = (int)(image.Width * (float).01); ypos = (int)((image.Height * (float).99) - watermark.Height); break; case WaterPosition.中下: xpos = (int)((image.Width * (float).50) - (watermark.Width / 2)); ypos = (int)((image.Height * (float).99) - watermark.Height); break; case WaterPosition.右下: xpos = (int)((image.Width * (float).99) - watermark.Width); ypos = (int)((image.Height * (float).99) - watermark.Height); break; } g.DrawImage(watermark, new Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes); } return(image); }
/// <summary> /// 图片添加文字水印 /// </summary> /// <param name="image">图片</param> /// <param name="text">文字内容</param> /// <param name="fontFamily">字体</param> /// <param name="emSize">字体大小px</param> /// <param name="fontColor">字体颜色,:#ffffff</param> /// <param name="position">位置</param> /// <param name="opacity">透明度:1-100</param> /// <param name="rotate">倾斜度 正负180</param> /// <returns></returns> public static Image AddWaterText(Image image, string text, string fontFamily, int emSize, string fontColor, WaterPosition position, int opacity, int rotate) { using (Graphics gs = Graphics.FromImage(image)) { //文本格式 Font font = new Font(fontFamily, emSize, FontStyle.Regular, GraphicsUnit.Pixel); SizeF crSize = gs.MeasureString(text, font); //倾斜度 gs.RotateTransform(rotate); float xpos = 0; float ypos = 0; switch (position) { case WaterPosition.左上: xpos = (float)image.Width * (float).01; ypos = (float)image.Height * (float).01; break; case WaterPosition.中上: xpos = ((float)image.Width * (float).50) - (crSize.Width / 2); ypos = (float)image.Height * (float).01; break; case WaterPosition.右上: xpos = ((float)image.Width * (float).99) - crSize.Width; ypos = (float)image.Height * (float).01; break; case WaterPosition.左中: xpos = (float)image.Width * (float).01; ypos = ((float)image.Height * (float).50) - (crSize.Height / 2); break; case WaterPosition.中中: xpos = ((float)image.Width * (float).50) - (crSize.Width / 2); ypos = ((float)image.Height * (float).50) - (crSize.Height / 2); break; case WaterPosition.右中: xpos = ((float)image.Width * (float).99) - crSize.Width; ypos = ((float)image.Height * (float).50) - (crSize.Height / 2); break; case WaterPosition.左下: xpos = (float)image.Width * (float).01; ypos = ((float)image.Height * (float).99) - crSize.Height; break; case WaterPosition.中下: xpos = ((float)image.Width * (float).50) - (crSize.Width / 2); ypos = ((float)image.Height * (float).99) - crSize.Height; break; case WaterPosition.右下: xpos = ((float)image.Width * (float).99) - crSize.Width; ypos = ((float)image.Height * (float).99) - crSize.Height; break; } var color = ColorTranslator.FromHtml(fontColor); gs.DrawString(text, font, new SolidBrush(Color.FromArgb(opacity / 100 * 255, color)), xpos, ypos); return(image); } }