public static void Mark(string originImagePath, string watermarkImagePath, string outputFolder, string fileName, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null) { if (!Directory.Exists(outputFolder)) { Directory.CreateDirectory(outputFolder); } string newImagePath = Path.Combine(outputFolder, fileName); Image newImage; using (Image originImage = Image.FromFile(originImagePath) , watermarkImage = Image.FromFile(watermarkImagePath)) { newImage = Mark(originImage, watermarkImage, slantWatermark, textUnderLogo); } //放在这里确保newImagePath与originImagePath相同时能正常保存 newImage.Save(newImagePath, ImageFormat.Jpeg); newImage.Dispose(); }
public static void Mark(string originImagePath, string watermarkImagePath, string outputFolder, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null) { string fileName = Path.GetFileName(originImagePath); Mark(originImagePath, watermarkImagePath, outputFolder, fileName, slantWatermark, textUnderLogo); }
public static Image Mark(Image originalImage, Image waterMark, SlantWatermark slantWatermark = null, TextUnderLogo textUnderLogo = null) { const int minWidthRate = 2; const int minHeightRate = 3; if (originalImage.Width / waterMark.Width < minWidthRate || originalImage.Height / waterMark.Height < minHeightRate) { return(new Bitmap(originalImage)); } Image newImage = new Bitmap(originalImage); using (Graphics gfx = Graphics.FromImage(newImage)) { gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; gfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; if (slantWatermark != null) { AddSlantWatermark(gfx, newImage.Width, newImage.Height, slantWatermark); } int marginBottom = 20; int marginLeft = 20; int logoMarginBottom = marginBottom; if (textUnderLogo != null) { SizeF fontSize = gfx.MeasureString(textUnderLogo.Text, textUnderLogo.Font); logoMarginBottom += (int)fontSize.Height; gfx.DrawString(textUnderLogo.Text, textUnderLogo.Font, textUnderLogo.Brush, originalImage.Width - fontSize.Width - marginLeft, originalImage.Height - fontSize.Height - marginBottom); } gfx.DrawImage(waterMark, new Rectangle(originalImage.Width - waterMark.Width - marginLeft, originalImage.Height - waterMark.Height - logoMarginBottom, waterMark.Width, waterMark.Height), 0, 0, waterMark.Width, waterMark.Height, GraphicsUnit.Pixel); } return(newImage); }