項目中有個添加水印的需求,須要給圖片鋪滿斜水印。spa
網上搜了半天全是添加在圖片上、下、左、右的案例。3d
因而按照網上的某一段案例本身修改了一些代碼。調試
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從上至下的斜水印,鋪滿圖片左邊三分之一。code
再畫兩個g.DrawString各佔三分二,這樣水印會鋪滿整張圖片,效果也不錯。orm
但項目的需求是水印文字是動態變化的,致使水印長度會長會短,長了第一個水印的尾部會把第二個水印覆蓋掉一點。blog
這樣就很是難看,調試了幾天仍是沒有進展,最後只能畫三個水印,讓三條水印交錯不在一個水平線上,缺點就是不太鋪滿圖片。圖片
但願有高手有更簡便的方法能夠交流一下。string
下面是加完水印的效果圖it