亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#(.net)水印圖片的生成完整實例

2020-01-24 02:24:53
字體:
來源:轉載
供稿:網友

本文以一個完整實例講述了C#水印圖片的生成方法。是非常實用的技巧。分享給大家供大家參考。

具體實例代碼如下:

/** *  使用說明:*  建議先定義一個WaterImage實例*  然后利用實例的屬性,去匹配需要進行操作的參數*  然后定義一個WaterImageManage實例*  利用WaterImageManage實例進行DrawImage(),印圖片水印*  DrawWords()印文字水印* */using System;using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;using System.IO;namespace ABC{  /// <summary>  /// 圖片位置  /// </summary>  public enum ImagePosition  {    LeftTop,    //左上    LeftBottom,  //左下    RightTop,    //右上    RigthBottom, //右下    TopMiddle,   //頂部居中    BottomMiddle, //底部居中    Center      //中心  }  /// <summary>  /// 水印圖片的操作管理 Design by Gary Gong From Demetersoft.com  /// </summary>  public class WaterImageManage  {    /// <summary>    /// 生成一個新的水印圖片制作實例    /// </summary>    public WaterImageManage()    {      //      // TODO: Add constructor logic here      //    }    /// <summary>    /// 添加圖片水印    /// </summary>    /// <param name="sourcePicture">源圖片文件名</param>    /// <param name="waterImage">水印圖片文件名</param>    /// <param name="alpha">透明度(0.1-1.0數值越小透明度越高)</param>    /// <param name="position">位置</param>    /// <param name="PicturePath" >圖片的路徑</param>    /// <returns>返回生成于指定文件夾下的水印文件名</returns>    public string DrawImage(string sourcePicture,                     string waterImage,                     float alpha,                     ImagePosition position,                     string PicturePath)    {      //      // 判斷參數是否有效      //      if (sourcePicture == string.Empty || waterImage == string.Empty || alpha == 0.0 || PicturePath == string.Empty)      {        return sourcePicture;      }      //      // 源圖片,水印圖片全路徑      //      string sourcePictureName = PicturePath + sourcePicture;      string waterPictureName = PicturePath + waterImage;      string fileSourceExtension = System.IO.Path.GetExtension(sourcePictureName).ToLower();      string fileWaterExtension = System.IO.Path.GetExtension(waterPictureName).ToLower();      //      // 判斷文件是否存在,以及類型是否正確      //      if (System.IO.File.Exists(sourcePictureName) == false ||        System.IO.File.Exists(waterPictureName) == false || (        fileSourceExtension != ".gif" &&        fileSourceExtension != ".jpg" &&        fileSourceExtension != ".png") || (        fileWaterExtension != ".gif" &&        fileWaterExtension != ".jpg" &&        fileWaterExtension != ".png")        )      {        return sourcePicture;      }      //      // 目標圖片名稱及全路徑      //      string targetImage = sourcePictureName.Replace(System.IO.Path.GetExtension(sourcePictureName), "") + "_1101.jpg";      //      // 將需要加上水印的圖片裝載到Image對象中      //      Image imgPhoto = Image.FromFile(sourcePictureName);      //      // 確定其長寬      //      int phWidth = imgPhoto.Width;      int phHeight = imgPhoto.Height;      //      // 封裝 GDI+ 位圖,此位圖由圖形圖像及其屬性的像素數據組成。      //      Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);      //      // 設定分辨率      //       bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);      //      // 定義一個繪圖畫面用來裝載位圖      //      Graphics grPhoto = Graphics.FromImage(bmPhoto);      //      //同樣,由于水印是圖片,我們也需要定義一個Image來裝載它      //      Image imgWatermark = new Bitmap(waterPictureName);      //      // 獲取水印圖片的高度和寬度      //      int wmWidth = imgWatermark.Width;      int wmHeight = imgWatermark.Height;      //SmoothingMode:指定是否將平滑處理(消除鋸齒)應用于直線、曲線和已填充區域的邊緣。      // 成員名稱  說明       // AntiAlias   指定消除鋸齒的呈現。       // Default    指定不消除鋸齒。      // HighQuality 指定高質量、低速度呈現。       // HighSpeed  指定高速度、低質量呈現。       // Invalid    指定一個無效模式。       // None     指定不消除鋸齒。       grPhoto.SmoothingMode = SmoothingMode.AntiAlias;       //      // 第一次描繪,將我們的底圖描繪在繪圖畫面上      //      grPhoto.DrawImage(imgPhoto,                    new Rectangle(0, 0, phWidth, phHeight),                    0,                    0,                    phWidth,                    phHeight,                    GraphicsUnit.Pixel);      //      // 與底圖一樣,我們需要一個位圖來裝載水印圖片。并設定其分辨率      //      Bitmap bmWatermark = new Bitmap(bmPhoto);      bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);      //      // 繼續,將水印圖片裝載到一個繪圖畫面grWatermark      //      Graphics grWatermark = Graphics.FromImage(bmWatermark);      //      //ImageAttributes 對象包含有關在呈現時如何操作位圖和圖元文件顏色的信息。      //         ImageAttributes imageAttributes = new ImageAttributes();      //      //Colormap: 定義轉換顏色的映射      //      ColorMap colorMap = new ColorMap();      //      //我的水印圖被定義成擁有綠色背景色的圖片被替換成透明      //      colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);      colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);      ColorMap[] remapTable = { colorMap };      imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);      float[][] colorMatrixElements = {       new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red紅色      new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, //green綠色      new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, //blue藍色          new float[] {0.0f, 0.0f, 0.0f, alpha, 0.0f}, //透明度         new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}};//      // ColorMatrix:定義包含 RGBA 空間坐標的 5 x 5 矩陣。      // ImageAttributes 類的若干方法通過使用顏色矩陣調整圖像顏色。      ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);      imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,       ColorAdjustType.Bitmap);      //      //上面設置完顏色,下面開始設置位置      //      int xPosOfWm;      int yPosOfWm;      switch (position)      {        case ImagePosition.BottomMiddle:          xPosOfWm = (phWidth - wmWidth) / 2;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.Center:          xPosOfWm = (phWidth - wmWidth) / 2;          yPosOfWm = (phHeight - wmHeight) / 2;          break;        case ImagePosition.LeftBottom:          xPosOfWm = 10;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.LeftTop:          xPosOfWm = 10;          yPosOfWm = 10;          break;        case ImagePosition.RightTop:          xPosOfWm = phWidth - wmWidth - 10;          yPosOfWm = 10;          break;        case ImagePosition.RigthBottom:          xPosOfWm = phWidth - wmWidth - 10;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.TopMiddle:          xPosOfWm = (phWidth - wmWidth) / 2;          yPosOfWm = 10;          break;        default:          xPosOfWm = 10;          yPosOfWm = phHeight - wmHeight - 10;          break;      }      // 第二次繪圖,把水印印上去      //      grWatermark.DrawImage(imgWatermark,       new Rectangle(xPosOfWm,                 yPosOfWm,                 wmWidth,                 wmHeight),                 0,                 0,                 wmWidth,                 wmHeight,                 GraphicsUnit.Pixel,                 imageAttributes);      imgPhoto = bmWatermark;      grPhoto.Dispose();      grWatermark.Dispose();      //      // 保存文件到服務器的文件夾里面      //      imgPhoto.Save(targetImage, ImageFormat.Jpeg);      imgPhoto.Dispose();      imgWatermark.Dispose();      return targetImage.Replace(PicturePath, "");    }/** * 使用說明:*  建議先定義一個WaterImage實例*  然后利用實例的屬性,去匹配需要進行操作的參數*  然后定義一個WaterImageManage實例*  利用WaterImageManage實例進行DrawImage(),印圖片水印*  DrawWords()印文字水印* -*/    /// <summary>    /// 在圖片上添加水印文字    /// </summary>    /// <param name="sourcePicture">源圖片文件(文件名,不包括路徑)</param>    /// <param name="waterWords">需要添加到圖片上的文字</param>    /// <param name="alpha">透明度</param>    /// <param name="position">位置</param>    /// <param name="PicturePath">文件路徑</param>    /// <returns></returns>    public string DrawWords(string sourcePicture,                     string waterWords,                     float alpha,                     ImagePosition position,                     string PicturePath)    {      //      // 判斷參數是否有效      //      if (sourcePicture == string.Empty || waterWords == string.Empty || alpha == 0.0 || PicturePath == string.Empty)      {        return sourcePicture;      }      //      // 源圖片全路徑      //      if (PicturePath.Substring(PicturePath.Length - 1, 1) != "/")        PicturePath += "/";      string sourcePictureName = PicturePath + sourcePicture;      string fileExtension = System.IO.Path.GetExtension(sourcePictureName).ToLower();      //      // 判斷文件是否存在,以及文件名是否正確      //      if (System.IO.File.Exists(sourcePictureName) == false || (        fileExtension != ".gif" &&        fileExtension != ".jpg" &&        fileExtension != ".png"))      {        return sourcePicture;      }      //      // 目標圖片名稱及全路徑      //      string targetImage = sourcePictureName.Replace(System.IO.Path.GetExtension(sourcePictureName), "") + "_0703.jpg";      //創建一個圖片對象用來裝載要被添加水印的圖片      Image imgPhoto = Image.FromFile(sourcePictureName);      //獲取圖片的寬和高      int phWidth = imgPhoto.Width;      int phHeight = imgPhoto.Height;      //      //建立一個bitmap,和我們需要加水印的圖片一樣大小      Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);      //SetResolution:設置此 Bitmap 的分辨率      //這里直接將我們需要添加水印的圖片的分辨率賦給了bitmap      bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);      //Graphics:封裝一個 GDI+ 繪圖圖面。      Graphics grPhoto = Graphics.FromImage(bmPhoto);      //設置圖形的品質      grPhoto.SmoothingMode = SmoothingMode.AntiAlias;      //將我們要添加水印的圖片按照原始大小描繪(復制)到圖形中      grPhoto.DrawImage(       imgPhoto,                      //  要添加水印的圖片       new Rectangle(0, 0, phWidth, phHeight), // 根據要添加的水印圖片的寬和高       0,                           // X方向從0點開始描繪       0,                           // Y方向       phWidth,                      // X方向描繪長度       phHeight,                      // Y方向描繪長度       GraphicsUnit.Pixel);               // 描繪的單位,這里用的是像素      //根據圖片的大小我們來確定添加上去的文字的大小      //在這里我們定義一個數組來確定      int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 };      //字體      Font crFont = null;      //矩形的寬度和高度,SizeF有三個屬性,分別為Height高,width寬,IsEmpty是否為空      SizeF crSize = new SizeF();      //利用一個循環語句來選擇我們要添加文字的型號      //直到它的長度比圖片的寬度小      for (int i = 0; i < 7; i++)      {        crFont = new Font("arial", sizes[i], FontStyle.Bold);        //測量用指定的 Font 對象繪制并用指定的 StringFormat 對象格式化的指定字符串。        crSize = grPhoto.MeasureString(waterWords, crFont);        // ushort 關鍵字表示一種整數數據類型        if ((ushort)crSize.Width < (ushort)phWidth)          break;      }      //截邊5%的距離,定義文字顯示(由于不同的圖片顯示的高和寬不同,所以按百分比截取)      int yPixlesFromBottom = (int)(phHeight * .05);      //定義在圖片上文字的位置      float wmHeight = crSize.Height;      float wmWidth = crSize.Width;      float xPosOfWm;      float yPosOfWm;   switch (position)      {        case ImagePosition.BottomMiddle:          xPosOfWm = phWidth / 2;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.Center:          xPosOfWm = phWidth / 2;          yPosOfWm = phHeight / 2;          break;        case ImagePosition.LeftBottom:          xPosOfWm = wmWidth;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.LeftTop:          xPosOfWm = wmWidth / 2;          yPosOfWm = wmHeight / 2;          break;        case ImagePosition.RightTop:          xPosOfWm = phWidth - wmWidth - 10;          yPosOfWm = wmHeight;          break;        case ImagePosition.RigthBottom:          xPosOfWm = phWidth - wmWidth - 10;          yPosOfWm = phHeight - wmHeight - 10;          break;        case ImagePosition.TopMiddle:          xPosOfWm = phWidth / 2;          yPosOfWm = wmWidth;          break;        default:          xPosOfWm = wmWidth;          yPosOfWm = phHeight - wmHeight - 10;          break;      }      //封裝文本布局信息(如對齊、文字方向和 Tab ??课唬?,顯示操作(如省略號插入和國家標準 (National) 數字替換)和 OpenType 功能。      StringFormat StrFormat = new StringFormat();      //定義需要印的文字居中對齊      StrFormat.Alignment = StringAlignment.Center;      //SolidBrush:定義單色畫筆。畫筆用于填充圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑。      //這個畫筆為描繪陰影的畫筆,呈灰色      int m_alpha = Convert.ToInt32(256 * alpha);      SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0));      //描繪文字信息,這個圖層向右和向下偏移一個像素,表示陰影效果      //DrawString 在指定矩形并且用指定的 Brush 和 Font 對象繪制指定的文本字符串。      grPhoto.DrawString(waterWords,                  //string of text                    crFont,                     //font                    semiTransBrush2,              //Brush                    new PointF(xPosOfWm + 1, yPosOfWm + 1), //Position                    StrFormat);      //從四個 ARGB 分量(alpha、紅色、綠色和藍色)值創建 Color 結構,這里設置透明度為153      //這個畫筆為描繪正式文字的筆刷,呈白色      SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));      //第二次繪制這個圖形,建立在第一次描繪的基礎上      grPhoto.DrawString(waterWords,         //string of text                    crFont,                  //font                    semiTransBrush,              //Brush                    new PointF(xPosOfWm, yPosOfWm), //Position                    StrFormat);      //imgPhoto是我們建立的用來裝載最終圖形的Image對象      //bmPhoto是我們用來制作圖形的容器,為Bitmap對象      imgPhoto = bmPhoto;      //釋放資源,將定義的Graphics實例grPhoto釋放,grPhoto功德圓滿      grPhoto.Dispose();      //將grPhoto保存      imgPhoto.Save(targetImage, ImageFormat.Jpeg);      imgPhoto.Dispose();      return targetImage.Replace(PicturePath, "");    }  }  /// <summary>  /// 裝載水印圖片的相關信息  /// </summary>  public class WaterImage  {    public WaterImage()    {    }    private string m_sourcePicture;    /// <summary>    /// 源圖片地址名字(帶后綴)    /// </summary>    public string SourcePicture    {      get { return m_sourcePicture; }      set { m_sourcePicture = value; }    }    private string m_waterImager;    /// <summary>    /// 水印圖片名字(帶后綴)    /// </summary>    public string WaterPicture    {      get { return m_waterImager; }      set { m_waterImager = value; }    }    private float m_alpha;    /// <summary>    /// 水印圖片文字的透明度    /// </summary>    public float Alpha    {      get { return m_alpha; }      set { m_alpha = value; }    }    private ImagePosition m_postition;    /// <summary>    /// 水印圖片或文字在圖片中的位置    /// </summary>    public ImagePosition Position    {      get { return m_postition; }      set { m_postition = value; }    }    private string m_words;    /// <summary>    /// 水印文字的內容    /// </summary>    public string Words    {      get { return m_words; }      set { m_words = value; }    }  }}

相信本文所述對大家的C#程序設計有一定的借鑒參考作用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文在线免费| 国产一区二区三区日韩欧美| 欧美成人精品在线播放| 日韩中文字幕在线播放| 欧美精品成人在线| 91精品久久久久久久久久入口| 久久激情视频免费观看| 亚洲国产精品成人va在线观看| 中文字幕视频一区二区在线有码| 欧美日韩一区二区精品| 久久久久亚洲精品国产| 国产精品欧美日韩| 国产精品一区久久| 久久久久久久久国产| 国产区精品视频| 另类专区欧美制服同性| 日韩高清有码在线| 在线观看精品国产视频| 欧美一区二区三区免费观看| 日韩精品视频在线观看网址| 555www成人网| 777国产偷窥盗摄精品视频| 欧美精品激情在线观看| 久久青草福利网站| 国产成人精品在线视频| 亚洲成人av在线播放| 超碰精品一区二区三区乱码| 97**国产露脸精品国产| 亚洲一区二区在线播放| 欧美精品在线看| 亚洲激情在线观看视频免费| 午夜精品一区二区三区在线视频| 亚洲人成在线观看网站高清| 欧美另类极品videosbest最新版本| 81精品国产乱码久久久久久| 成人久久久久久久| 欧美亚洲成人免费| 亚洲丝袜一区在线| 欧美成人sm免费视频| 亚洲石原莉奈一区二区在线观看| 日韩一区av在线| 欧美国产视频一区二区| 欧美激情精品久久久| 欧美一区二区三区艳史| 欧美高清理论片| 日韩成人在线观看| 久久亚洲精品小早川怜子66| 国产精品亚洲视频在线观看| 欧美国产日本在线| 成人午夜高潮视频| 欧美另类xxx| 国产精品丝袜久久久久久不卡| 91精品视频观看| 亚洲国产精品va在线看黑人| 亚洲精品成人久久久| 国产精品国产三级国产专播精品人| 国产成人精彩在线视频九色| 国产精品极品美女粉嫩高清在线| 综合国产在线视频| 亚洲精品动漫久久久久| 中文字幕自拍vr一区二区三区| 亚洲第一中文字幕| 国产精品观看在线亚洲人成网| 国产视频在线一区二区| 欧美成年人网站| 亚洲一区二区久久| 精品色蜜蜜精品视频在线观看| 亲爱的老师9免费观看全集电视剧| 亚洲综合在线做性| 91视频九色网站| 91免费电影网站| 国产精品日日做人人爱| 欧美亚洲日本网站| 久久伊人精品一区二区三区| 久久成人国产精品| 欧美性xxxxhd| 亚洲女人初尝黑人巨大| 色与欲影视天天看综合网| 国外成人性视频| 国产在线拍偷自揄拍精品| 精品香蕉在线观看视频一| 国产精品va在线| 亚洲影视九九影院在线观看| 日本精品视频在线| 亚洲国产高清高潮精品美女| 久久视频精品在线| 国产日韩欧美黄色| 精品国产91久久久| 亚洲一区二区久久久久久久| 在线播放亚洲激情| 久久亚洲精品一区| xxx成人少妇69| 精品国产欧美一区二区三区成人| 亚洲日韩欧美视频一区| 亚洲tv在线观看| 亚洲新声在线观看| 91在线观看免费网站| 国产玖玖精品视频| 亚洲二区中文字幕| 久热精品视频在线观看| 国产区精品在线观看| 精品国产91乱高清在线观看| 国内精久久久久久久久久人| 欧美在线视频免费观看| 成人国内精品久久久久一区| 国产成人一区二区在线| 国产精品夜间视频香蕉| 一区二区三区四区在线观看视频| 一区二区三区久久精品| 日韩视频永久免费观看| 国产精品444| 亚洲人成77777在线观看网| 久久免费高清视频| 精品少妇v888av| 91久久国产精品91久久性色| 亚洲一区二区久久久久久久| 欧美日韩中文字幕在线视频| 亚洲 日韩 国产第一| 久久久亚洲成人| 一区二区三区在线播放欧美| 国产精品美女久久久免费| 亚洲国产精品女人久久久| 欧美丝袜一区二区| 欧美日本亚洲视频| 97国产精品视频| 日韩高清欧美高清| 午夜精品美女自拍福到在线| 日韩在线观看精品| 国产精品嫩草视频| www.美女亚洲精品| 久久精品国产视频| 欧美高清在线播放| 久久久久久久电影一区| 亚洲欧洲在线播放| 亚洲精品在线不卡| 国产视频欧美视频| 亚洲香蕉成人av网站在线观看| 欧美精品免费看| 午夜精品免费视频| 精品视频在线导航| 日本在线观看天堂男亚洲| 欧美激情国产日韩精品一区18| 久久久亚洲福利精品午夜| 日韩有码在线观看| 国产成人高潮免费观看精品| 久久九九亚洲综合| 日韩少妇与小伙激情| 久久免费视频在线| 亚洲免费电影在线观看| 国产精品日韩精品| 正在播放欧美视频| 亚洲精品美女网站| 精品激情国产视频| 538国产精品视频一区二区| 91影院在线免费观看视频| 欧美夜福利tv在线| 国产一区二区三区在线视频| 亚洲精品自拍第一页| 国产不卡在线观看| 美日韩丰满少妇在线观看| 欧美一级电影免费在线观看| 成人福利在线观看| 91精品啪aⅴ在线观看国产| 国产色综合天天综合网|