/// <summary> /// 为图像添加水印,并生成新的图像 /// </summary> /// <param name="图像">源图像</param> /// <param name="水印图像">水印图像</param> /// <param name="水印方位">相对于源图像的方位,在不冲突的情况下可复选,比如“水印方位.右|水印方位.下”</param> /// <param name="水平边距">左侧或右侧的边距</param> /// <param name="垂直边距">上方或下方的边距</param> /// <returns>添加了水印的图片</returns> public static Bitmap 添加水印(this Image 图像, Image 水印图像, 对齐方位 水印方位, int 水平边距, int 垂直边距) { Bitmap Bmp = 图像.Clone() as Bitmap; 原图添加水印(Bmp, 水印图像, 水印方位, 水平边距, 垂直边距); return(Bmp); }
/// <summary> /// 为原图添加水印 /// </summary> /// <param name="图像">源图像</param> /// <param name="水印图像">水印图像</param> /// <param name="水印方位">相对于源图像的方位,在不冲突的情况下可复选,比如“水印方位.右|水印方位.下”</param> /// <param name="水平边距">左侧或右侧的边距</param> /// <param name="垂直边距">上方或下方的边距</param> /// <returns>添加了水印的图片</returns> public static void 原图添加水印(this Image 图像, Image 水印图像, 对齐方位 水印方位, int 水平边距, int 垂直边距) { Graphics g = Graphics.FromImage(图像); var x = 图像.Width / 2 - 水印图像.Width / 2; var y = 图像.Height / 2 - 水印图像.Height / 2; if ((水印方位 & 对齐方位.) > 0) { y = 0 + 垂直边距; } if ((水印方位 & 对齐方位.) > 0) { y = 图像.Height - 水印图像.Height - 垂直边距; } if ((水印方位 & 对齐方位.左) > 0) { x = 0 + 水平边距; } if ((水印方位 & 对齐方位.右) > 0) { x = 图像.Width - 水印图像.Width - 水平边距; } g.DrawImage(水印图像, new Rectangle(x, y, 水印图像.Width, 水印图像.Height), 0, 0, 水印图像.Width, 水印图像.Height, GraphicsUnit.Pixel); g.Dispose(); }
/// <summary> /// 放大或缩小画布 /// </summary> /// <param name="图像">图像</param> /// <param name="新画布宽度">新画布宽度</param> /// <param name="新画布高度">新画布高度</param> /// <param name="对齐方位">原图在新画布中的对齐方位</param> /// <returns>放大或缩小画布后的图像</returns> public static BitmapSource 缩放画布(this BitmapSource 图像, int 新画布宽度, int 新画布高度, 对齐方位 对齐方位) { DrawingVisual dv = new DrawingVisual(); using (var dc = dv.RenderOpen()) { } RenderTargetBitmap rtb = new RenderTargetBitmap(新画布宽度, 新画布高度, 96, 96, PixelFormats.Pbgra32); rtb.Render(dv); return(rtb.添加水印(图像, 对齐方位, 0, 0, 1)); }
/// <summary> /// 为图像添加水印,并生成新的图像 /// </summary> /// <param name="图像">源图像</param> /// <param name="水印图像文件路径">水印图像文件路径</param> /// <param name="水印方位">相对于源图像的方位,在不冲突的情况下可复选,比如“水印方位.右|水印方位.下”</param> /// <param name="水平边距">左侧或右侧的边距</param> /// <param name="垂直边距">上方或下方的边距</param> /// <returns>添加了水印的图片</returns> public static Bitmap 添加水印(this Image 图像, string 水印图像文件路径, 对齐方位 水印方位, int 水平边距, int 垂直边距) { return(添加水印(图像, 读取图像自文件(水印图像文件路径), 水印方位, 水平边距, 垂直边距)); }
/// <summary> /// 放大或缩小画布 /// </summary> /// <param name="图像">图像</param> /// <param name="新画布宽度">新画布宽度</param> /// <param name="新画布高度">新画布高度</param> /// <param name="对齐方位">原图在新画布中的对齐方位</param> /// <returns>放大或缩小画布后的图像</returns> public static BitmapSource 缩放画布(this BitmapSource 图像, int 新画布宽度, int 新画布高度, 对齐方位 对齐方位) { DrawingVisual dv = new DrawingVisual(); using (var dc = dv.RenderOpen()) { } RenderTargetBitmap rtb = new RenderTargetBitmap(新画布宽度, 新画布高度, 96, 96, PixelFormats.Pbgra32); rtb.Render(dv); return rtb.添加水印(图像, 对齐方位, 0, 0,1); }
/// <summary> /// 为图像添加水印,并生成为新的图像 /// </summary> /// <param name="图像">源图像</param> /// <param name="水印图像">水印图像</param> /// <param name="水印方位">相对于源图像的方位,在不冲突的情况下可复选,比如“水印方位.右|水印方位.下”</param> /// <param name="水平边距">左侧或右侧的边距</param> /// <param name="垂直边距">上方或下方的边距</param> /// <returns>添加了水印的图片</returns> public static RenderTargetBitmap 添加水印(this BitmapSource 图像, BitmapSource 水印图像, 对齐方位 水印方位, int 水平边距, int 垂直边距, double 不透明度) { var x = 图像.PixelWidth / 2 - 水印图像.PixelWidth / 2; var y = 图像.PixelHeight / 2 - 水印图像.PixelHeight / 2; if ((水印方位 & 对齐方位.上) > 0) { y = 0 + 垂直边距; } if ((水印方位 & 对齐方位.下) > 0) { y = 图像.PixelHeight - 水印图像.PixelHeight - 垂直边距; } if ((水印方位 & 对齐方位.左) > 0) { x = 0 + 水平边距; } if ((水印方位 & 对齐方位.右) > 0) { x = 图像.PixelWidth - 水印图像.PixelWidth - 水平边距; } return 添加覆盖图像(图像, 水印图像, x, y, 不透明度); }
/// <summary> /// 为图像添加水印,并生成为新的图像 /// </summary> /// <param name="图像">源图像</param> /// <param name="水印图像">水印图像</param> /// <param name="水印方位">相对于源图像的方位,在不冲突的情况下可复选,比如“水印方位.右|水印方位.下”</param> /// <param name="水平边距">左侧或右侧的边距</param> /// <param name="垂直边距">上方或下方的边距</param> /// <returns>添加了水印的图片</returns> public static RenderTargetBitmap 添加水印(this BitmapSource 图像, BitmapSource 水印图像, 对齐方位 水印方位, int 水平边距, int 垂直边距, double 透明度) { var x = 图像.PixelWidth / 2 - 水印图像.PixelWidth / 2; var y = 图像.PixelHeight / 2 - 水印图像.PixelHeight / 2; if ((水印方位 & 对齐方位.) > 0) { y = 0 + 垂直边距; } if ((水印方位 & 对齐方位.) > 0) { y = 图像.PixelHeight - 水印图像.PixelHeight - 垂直边距; } if ((水印方位 & 对齐方位.左) > 0) { x = 0 + 水平边距; } if ((水印方位 & 对齐方位.右) > 0) { x = 图像.PixelWidth - 水印图像.PixelWidth - 水平边距; } return(添加覆盖图像(图像, 水印图像, x, y, 透明度)); }