项目中有个添加水印的需求,需要给图片铺满斜水印。
网上搜了半天全是添加在图片上、下、左、右的案例。
于是按照网上的某一段案例自己修改了一些代码。
1 Bitmap bitmap = new Bitmap(image); 2 int degree = 45; 3 //图片的宽度与高度 4 int width = bitmap.Width, height = bitmap.Height; 5 //水印文字 6 string text = string.Format("仅供“{0}”使用", projectName); 7 Graphics g = Graphics.FromImage(bitmap); 8 g.DrawImage(bitmap, 0, 0); 9 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 10 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 11 g.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel); 12 Font crFont = new Font("微软雅黑", 22, FontStyle.Bold); 13 SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(60, 137, 131, 131)); 14 //将原点移动 到图片中点 15 g.TranslateTransform(0, height); 16 //以原点为中心 转 -45度 17 g.RotateTransform(-45); 18 for (int i = 0; i < 50; i++) 19 { 20 g.DrawString(text, crFont, semiTransBrush, new PointF(0 - i * 300, 100 + i * 300)); 21 g.DrawString(text, crFont, semiTransBrush, new PointF(150 - i * 300, 500 + i * 300)); 22 g.DrawString(text, crFont, semiTransBrush, new PointF(650 - i * 300, 600 + i * 300)); 23 } 24 //保存文件 25 bitmap.Save(sImgPath, ImageFormat.Jpeg); 26 return sImgPath;
本来想法是画一个 g.DrawString从上至下的斜水印,铺满图片左边三分之一。
再画两个g.DrawString各占三分二,这样水印会铺满整张图片,效果也不错。
但项目的需求是水印文字是动态变化的,导致水印长度会长会短,长了第一个水印的尾部会把第二个水印覆盖掉一点。
这样就非常难看,调试了几天还是没有进展,最后只能画三个水印,让三条水印交错不在一个水平线上,缺点就是不太铺满图片。
希望有高手有更简便的方法可以交流一下。
下面是加完水印的效果图