/// <summary> /// 添加水印 /// </summary> /// <param name="originalImagePath">源图相对路径,相对于网站根目录。如:wwwroot/upload/image/a.jpg</param> public static void AddWaterMark(string originalImagePath) { string filename = ""; string extension = Path.GetExtension(originalImagePath); filename = originalImagePath.Replace(extension, "WaterMark" + extension); var waterMarkConfig = ConfigHelper.Get <WaterMarkConfig>(); WaterMarkText waterMarkTextInfo = waterMarkConfig.WaterMarkTextInfo; WaterMarkImage waterMarkImageInfo = waterMarkConfig.WaterMarkImageInfo; int waterMarkType = waterMarkConfig.WaterMarkType; float transparence = Convert.ToSingle(waterMarkImageInfo.Transparence) / 100f; string str5 = FileHelper.MapPath("~/") + Path.DirectorySeparatorChar.ToString(); originalImagePath = str5 + originalImagePath; filename = str5 + filename; Image image = null; try { image = Image.FromFile(originalImagePath); } catch (FileNotFoundException ex) { throw new Exception(ex.Message); } Bitmap bitmap = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); Graphics picture = Graphics.FromImage(bitmap); picture.Clear(Color.Green); picture.SmoothingMode = SmoothingMode.HighQuality; picture.InterpolationMode = InterpolationMode.High; picture.DrawImage(image, 0, 0, image.Width, image.Height); switch (waterMarkType) { case 0: AddWatermarkText(picture, waterMarkTextInfo, image.Width, image.Height); break; case 1: AddWatermarkImage(picture, waterMarkImageInfo, image.Width, image.Height, transparence); break; } try { bitmap.Save(filename, ImageFormat.Jpeg); } catch (ArgumentNullException ex) { throw new Exception(ex.Message); } finally { bitmap.Dispose(); image.Dispose(); picture.Dispose(); } FileHelper.Delete(originalImagePath, FileMethod.File); string newFile = filename.Replace("WaterMark", ""); FileHelper.Move(filename, newFile, FileMethod.File); }
/// <summary> /// 添加图片水印 /// </summary> /// <param name="picture">Graphics对象</param> /// <param name="waterMarkImageInfo">图片水印对象</param> /// <param name="width">宽度</param> /// <param name="height">高度</param> /// <param name="transparence">透明度</param> private static void AddWatermarkImage(Graphics picture, WaterMarkImage waterMarkImageInfo, int width, int height, float transparence) { string filename = FileHelper.MapPath("~/" + waterMarkImageInfo.ImagePath); string waterMarkPosition = waterMarkImageInfo.WaterMarkPosition; int waterMarkPositionX = waterMarkImageInfo.WaterMarkPositionX; int waterMarkPositionY = waterMarkImageInfo.WaterMarkPositionY; Image image = null; try { image = new Bitmap(filename); } catch (ArgumentException ex) { throw new Exception(ex.Message); } ColorMap map = new ColorMap { OldColor = Color.FromArgb(255, 0, 255, 0), NewColor = Color.FromArgb(0, 0, 0, 0) }; ColorMap[] mapArray = new ColorMap[] { map }; ImageAttributes imageAttr = new ImageAttributes(); imageAttr.SetRemapTable(mapArray, ColorAdjustType.Bitmap); float[][] numArray2 = new float[5][]; float[] numArray3 = new float[5]; numArray3[0] = 1f; numArray2[0] = numArray3; float[] numArray4 = new float[5]; numArray4[1] = 1f; numArray2[1] = numArray4; float[] numArray5 = new float[5]; numArray5[2] = 1f; numArray2[2] = numArray5; float[] numArray6 = new float[5]; numArray6[3] = transparence; numArray2[3] = numArray6; float[] numArray7 = new float[5]; numArray7[4] = 1f; numArray2[4] = numArray7; float[][] newColorMatrix = numArray2; ColorMatrix matrix = new ColorMatrix(newColorMatrix); imageAttr.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int x = 0; int y = 0; int num5 = 0; int num6 = 0; double num7 = 1.0; int num8 = (waterMarkImageInfo.WaterMarkPercent == 0) ? 4 : waterMarkImageInfo.WaterMarkPercent; int num9 = (waterMarkImageInfo.WaterMarkThumbPercent == 0) ? 1 : waterMarkImageInfo.WaterMarkThumbPercent; if (waterMarkImageInfo.WaterMarkPercentType == "ManualSet") { num7 = 1.0 / Convert.ToDouble(num9); } else { double num10 = Convert.ToDouble((int)(width / num8)); double num11 = Convert.ToDouble((int)(height / num8)); double num12 = Convert.ToDouble(image.Width); double num13 = Convert.ToDouble(image.Height); if ((width > (image.Width * num8)) && (height > (image.Height * num8))) { num7 = 1.0; } else if ((width > (image.Width * num8)) && (height < (image.Height * num8))) { num7 = num11 / num13; } else if ((width < (image.Width * num8)) && (height > (image.Height * num8))) { num7 = num10 / num12; } else if ((width * image.Height) > (height * image.Width)) { num7 = num11 / num13; } else { num7 = num10 / num12; } } num5 = Convert.ToInt32((double)(image.Width * num7)); num6 = Convert.ToInt32((double)(image.Height * num7)); string str3 = waterMarkPosition; if (str3 != null) { if (!(str3 == "WM_TOP_LEFT")) { if (str3 == "WM_TOP_RIGHT") { x = (width - num5) - 10; y = 10; } else if (str3 == "WM_BOTTOM_RIGHT") { x = (width - num5) - 10; y = (height - num6) - 10; } else if (str3 == "WM_BOTTOM_LEFT") { x = 10; y = (height - num6) - 10; } else if (str3 == "WM_SetByManual") { x = waterMarkPositionX; y = waterMarkPositionY; } } else { x = 10; y = 10; } } try { picture.DrawImage(image, new Rectangle(x, y, num5, num6), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttr); } catch (Exception ex) { throw new Exception(ex.Message); } finally { image.Dispose(); imageAttr.Dispose(); } }