這一段公司有個項目,客戶要求上傳的圖片要帶上自定義的水印。以前也經常和朋友討論C#圖片水印方面的問題,但是從來沒有實際操作過。所以,借這次項目的機會也研究了一下C#圖片水印的功能!本人參考的是discuz論壇中的代碼。這種方法是直接把要上傳的圖片先轉化成System.Drawing.Image,而不用保存到服務器端的磁盤上,然後加上水印重新繪制,再保存到服務器端的磁盤上,下面就拿出來曬曬:
1 /// <summary>
2 /// 加圖片水印
3 /// </summary>
4 /// <param name="img">要加水印的原圖(System.Drawing)</param>
5 /// <param name="filename">文件名</param>
6 /// <param name="watermarkFilename">水印文件名</param>
7 /// <param name="watermarkStatus">圖片水印位置1=左上 2=中上 3=右上 4=左中 5=中中 6=右中 7=左下 8=右中 9=右下</param>
8 /// <param name="quality">加水印後的質量0~100,數字越大質量越高</param>
9 /// <param name="watermarkTransparency">水印圖片的透明度1~10,數字越小越透明,10為不透明</param>
10 public static void ImageWaterMarkPic(Image img, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
11 {
12 Graphics g = Graphics.FromImage(img);
13 //設置高質量插值法
14 //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
15 //設置高質量,低速度呈現平滑程度
16 //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
17 Image watermark = new Bitmap(watermarkFilename);
18
19 if (watermark.Height >= img.Height || watermark.Width >= img.Width)
20 return;
21
22 ImageAttributes imageAttributes = new ImageAttributes();
23 ColorMap colorMap = new ColorMap();
24
25 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
26 co