1. 程式人生 > >c# 圖文新增文字斜水印

c# 圖文新增文字斜水印

專案中有個新增水印的需求,需要給圖片鋪滿斜水印。

網上搜了半天全是新增在圖片上、下、左、右的案例。

於是按照網上的某一段案例自己修改了一些程式碼。

 

 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各佔三分二,這樣水印會鋪滿整張圖片,效果也不錯。

但專案的需求是水印文字是動態變化的,導致水印長度會長會短,長了第一個水印的尾部會把第二個水印覆蓋掉一點。

這樣就非常難看,除錯了幾天還是沒有進展,最後只能畫三個水印,讓三條水印交錯不在一個水平線上,缺點就是不太鋪滿圖片。

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

下面是加完水印的效果圖