c#实现给图文添加倾斜水印

码农公社  210.net.cn   210= 1024  10月24日一个重要的节日--码农(程序员)节

项目需要给图片铺满“斜水印”。  网上全是添加在图片"上下左右"的案例。  于是自己动手鼓捣出了一些代码,目的居然实现了。


Bitmap bitmap = new Bitmap(image);
                    int degree = 45;
                    //图片的宽度与高度
                    int width = bitmap.Width, height = bitmap.Height;
                    //水印文字 210.net.cn
                    string text = string.Format("仅供“{0}”使用", projectName);
                    Graphics g = Graphics.FromImage(bitmap);
                    g.DrawImage(bitmap, 0, 0);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel);
                    Font crFont = new Font("微软雅黑", 22, FontStyle.Bold);
                    SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(60, 137, 131, 131));
                    //将原点移动 到图片中点
                    g.TranslateTransform(0, height);
                    //以原点为中心 转 -45度
                    g.RotateTransform(-45);
                    for (int i = 0; i < 50; i++)
                    {
                        g.DrawString(text, crFont, semiTransBrush, new PointF(0 - i * 300, 100 + i * 300));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(150 - i * 300, 500 + i * 300));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(650 - i * 300, 600 + i * 300));
                    }
                    //保存文件
                    bitmap.Save(sImgPath, ImageFormat.Jpeg);
                    return sImgPath;


本来想画一个 g.DrawString从上至下的斜水印,铺满图片左边三分之一。  

再画两个g.DrawString各占三分二,这样水印会铺满整张图片,效果也不错。  

但项目要求水印文字是动态变化的,导致水印长度将不固定,长了第一个水印的尾部会把第二个水印覆盖掉一部分。  

这样就非常难看,调试了几天没有进展,最后只能画三个水印,让三条水印交错不在一个水平线上,缺点就是不太铺满图片。  

希望有高手有更简便的方法可以交流一下。  

下面是加完水印的效果图

1.jpg




引自https://www.cnblogs.com/jokerSun/p/11176336.html,轻度整理。

评论