標籤:
使用情境
1、也就是大家經常用的,一般是圖片的4個角落,基於橫縱座標來添加。
2、在圖片內基於固定位置,文字始終置中。剛開始我基於第一種情境來根據浮水印漢字的長度來計算座標,後來探索方法始終不可靠。現在是先在圖片固定地區(浮水印地區)畫一個矩形,然後再矩形內添加浮水印漢字,並使用畫刷保持文字置中。
情境一效果
情境二效果
情境一添加浮水印方法
static void addWatermarkText(Graphics picture,int fontsize, string _watermarkText, string _watermarkPosition, int _width, int _height) { int[] sizes = new int[] {32, 14, 12, 10, 8, 6, 4 }; Font crFont = null; SizeF crSize = new SizeF(); crFont = new Font("微軟雅黑", fontsize, FontStyle.Bold); crSize = picture.MeasureString(_watermarkText, crFont); float xpos = 0; float ypos = 0; Color color =Color.Firebrick; switch (_watermarkPosition) { case "WM_TOP_LEFT": xpos = ((float)_width * (float).01) + (crSize.Width / 2); ypos = (float)_height * (float).01; break; case "WM_TOP_RIGHT": xpos = ((float)_width * (float).99) - (crSize.Width / 2); ypos = (float)_height * (float).01; break; case "WM_BOTTOM_RIGHT": xpos = ((float)_width * (float).99) - (crSize.Width / 2); ypos = ((float)_height * (float).99) - crSize.Height; break; case "WM_BOTTOM_LEFT": xpos = ((float)_width * (float).01) + (crSize.Width / 2); ypos = ((float)_height * (float).99) - crSize.Height; break; } StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));//加陰影 picture.DrawString(_watermarkText, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat); SolidBrush semiTransBrush = new SolidBrush(color); //添加浮水印 picture.DrawString(_watermarkText, crFont, semiTransBrush, xpos, ypos, StrFormat); semiTransBrush2.Dispose(); semiTransBrush.Dispose(); }
情境二添加浮水印方法
static void addWatermarkText(Graphics picture,string type, int fontsize, string _watermarkText) { //1、先畫矩形 RectangleF drawRect; Color color; if (type == "Top") { drawRect = new RectangleF(73, 135, 450, 64); color = Color.FromArgb(255, 255, 255); } else { drawRect = new RectangleF(194, 245, 250, 39); color = Color.FromArgb(244, 226, 38); } //2、在基於矩形畫浮水印文字 Font crFont = null; StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; crFont = new Font("微軟雅黑", fontsize, FontStyle.Bold); SolidBrush semiTransBrush = new SolidBrush(color); //添加浮水印 picture.DrawString(_watermarkText, crFont, semiTransBrush, drawRect, StrFormat); semiTransBrush.Dispose(); }
總結
和第一種方法比起來,第二種方法更直觀,更短小精悍,只需要在你需要添加浮水印的圖片上計算好固定座標然後先畫一個矩形,然後把浮水印漢字畫在矩形內,這樣不管浮水印漢字如何變化都可以在圖片固定位置置中。
C#基於兩種需求向圖片添加浮水印