一步一步生成圖片水印


     水印,就是指在原圖片上添加一些自己的東西,比如自己網站的logo或者簽名之類的,這樣別人轉載的時候就會帶上自己版權的信息,這對於網絡中防盜鏈非常有效。即使是別人把你的圖片轉走了,也會帶上專屬於你的信息,通俗一點就是類似於你為這個圖片蓋了一個章。

      給圖片添加水印常用的有圖片水印和文字水印,網上也有很多生成水印的工具,但是作為一個屌絲,不管好與不好,是不是用自己手寫的工具會更爽呢?本文僅僅是提供了一種實現的方法,肯定還有其他好的方法,歡迎大家來一起交流。

      由於樓主是一個務實的人,不喜歡整太多虛無縹緲的,所以程序的界面都是原生態的哈,呵呵,有需要的童鞋可以自己去添加樣式改造。好了,不多說,先上圖看一下效果。

      圖1為原圖,圖2-圖6為添加水印之后的圖片。

       

                            圖-1  原圖                                            圖-2 左上角加水印                                                       圖-2 右上角加水印

       

                     圖-3 左下角加水印                                           圖-3 中間加水印                                                       圖-3 右下角加水印

      整個程序的結構跟之前的那篇文章快速生成縮略圖的結構一樣,一個簡單的前台顯示界面,一個Handler。前台將圖片的原圖路徑和保存路徑傳到后台,然后通過Handler去處理,雖然代碼很簡單,但是分工還是很明確,各司其責,互不干擾。對水印的位置,通過如下的枚舉來控制:      

 public enum WaterPositionMode
    {
        LeftTop,
        LeftBottom,
        RightTop,
        RightBottom,
        Center
    }
View Code  

        前台頁面:

         

         Handler中通過一個方法來處理生成圖片的水印。主要代碼:

 public static void AddWaterText(string oldpath,string savepath,string watertext,WaterPositionMode position,string color,int alpha)
        {
            Image image = Image.FromFile(oldpath);
            Bitmap bitmap=new Bitmap(image.Width,image.Height);
            Graphics graphics = Graphics.FromImage(bitmap);
            graphics.Clear(Color.White);
            graphics.DrawImage(image,new Rectangle(0,0,image.Width,image.Height),0,0,image.Width,image.Height,GraphicsUnit.Pixel);
            Font font=new Font("arial",18);
            SizeF ziSizeF=new SizeF();
            ziSizeF = graphics.MeasureString(watertext, font);
            float x = 0f;
            float y = 0f;
            switch (position)
            {
                case  WaterPositionMode.LeftTop:
                    x = ziSizeF.Width/2f;
                    y = 8f;
                    break;
                case WaterPositionMode.LeftBottom:
                    x = ziSizeF.Width/2f;
                    y = image.Height - ziSizeF.Height;
                    break;
                case WaterPositionMode.RightTop:
                    x = image.Width*1f - ziSizeF.Width/2f;
                    y = 8f;
                    break;
                case WaterPositionMode.RightBottom:
                    x = image.Width - ziSizeF.Width;
                    y = image.Height - ziSizeF.Height;
                    break;
                case WaterPositionMode.Center:
                    x = image.Width/2;
                    y = image.Height/2 - ziSizeF.Height/2;
                    break;
            }
            try
            {
                StringFormat stringFormat = new StringFormat {Alignment = StringAlignment.Center};
                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(alpha, 0, 0, 0));
                graphics.DrawString(watertext, font, solidBrush, x + 1f, y + 1f, stringFormat);
                SolidBrush brush = new SolidBrush(Color.FromArgb(alpha, ColorTranslator.FromHtml(color)));
                graphics.DrawString(watertext, font, brush, x, y, stringFormat);
                solidBrush.Dispose();
                brush.Dispose();
                bitmap.Save(savepath, ImageFormat.Jpeg);
            }
            catch (Exception e)
            {


            }
            finally
            {
                bitmap.Dispose();
                image.Dispose();
            }
            
        }
View Code

 

         這樣就能完美的生成水印圖片了哦。當然了,由於只是做一個小的Demo,所以也沒有循環的給文件夾下的所有圖片去添加水印了,需要的同學可以自己試試哈。由於時間的關系,水印的另一種方式圖片水印今天就不寫了,下次再和大家分享。

         希望能夠給需要的朋友一點幫助,您的支持,我最大的動力,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM