国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

ASP.NET圖片加水印的實現代碼(C#)

開發 后端
本文提供了一段ASP.NET圖片加水印的實現代碼(C#)。代碼實現的水印為透明文字水印,可以定義文字水印的位置和透明度。

本文介紹ASP.NET圖片加水印的方法。水印為透明文字水印,可以定義文字水印的位置和透明度。

代碼分幾個部分,請查看代碼中的注釋。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. using System.IO;  
  6. using System.Drawing;  
  7. using System.Drawing.Imaging;  
  8. using System.Drawing.Drawing2D;  
  9.  
  10. namespace DocMIS.AppConfig  
  11. {  
  12.     /**//// < summary>  
  13.     /// 水印位置  
  14.     /// < /summary>  
  15.     public enum ImagePosition  
  16.     {  
  17.         /**//// < summary>  
  18.         /// 左上  
  19.         /// < /summary>  
  20.         LeftTop,  
  21.         /**//// < summary>  
  22.         /// 左下  
  23.         /// < /summary>  
  24.         LeftBottom,  
  25.         /**//// < summary>  
  26.         /// 右上  
  27.         /// < /summary>  
  28.         RightTop,  
  29.         /**//// < summary>  
  30.         /// 右下  
  31.         /// < /summary>  
  32.         RigthBottom,  
  33.         /**//// < summary>  
  34.         /// 頂部居中  
  35.         /// < /summary>  
  36.         TopMiddle,  
  37.         /**//// < summary>  
  38.         /// 底部居中  
  39.         /// < /summary>  
  40.         BottomMiddle,  
  41.         /**//// < summary>  
  42.         /// 中心  
  43.         /// < /summary>  
  44.         Center   
  45.     }  
  46.  
  47.     /**//// < summary>  
  48.     /// 圖像操作類(主要用于給圖片加上透明文字水印)  
  49.     /// < /summary>  
  50.     class ImageWater_Word  
  51.     {  
  52.         private string _ErrMsg;  
  53.         #region 出錯信息  
  54.         /**//// < summary>  
  55.         /// 出錯信息  
  56.         /// < /summary>  
  57.         public string ErrMsg  
  58.         {  
  59.             get { return _ErrMsg; }  
  60.             set { _ErrMsg = value; }  
  61.         }  
  62.         #endregion  
  63.  
  64.  
  65.         #region 將文件轉換成流  
  66.         //public byte[] SetImageToByteArray(string fileName, ref string fileSize)  
  67.         /**//// < summary>  
  68.         /// 將文件轉換成流  
  69.         /// < /summary>  
  70.         /// < param name="fileName">文件全路徑< /param>  
  71.         /// < returns>< /returns>  
  72.         private byte[] SetImageToByteArray(string fileName)  
  73.         {  
  74.             byte[] image = null;  
  75.             try 
  76.             {  
  77.                 FileStream fs = new FileStream(fileName, FileMode.Open);  
  78.                 FileInfo fileInfo = new FileInfo(fileName);  
  79.                 //fileSize = Convert.ToDecimal(fileInfo.Length / 1024).ToString("f2") + " K";  
  80.                 int streamLength = (int)fs.Length;  
  81.                 image = new byte[streamLength];  
  82.                 fs.Read(image, 0, streamLength);  
  83.                 fs.Close();  
  84.                 return image;  
  85.             }  
  86.             catch 
  87.             {  
  88.                 return image;  
  89.             }  
  90.         }  
  91.         #endregion  
  92.  
  93.         #region 將byte轉換成MemoryStream類型  
  94.         /**//// < summary>  
  95.         /// ASP.NET圖片加水?。簩yte轉換成MemoryStream類型  
  96.         /// < /summary>  
  97.         /// < param name="mybyte">byte[]變量< /param>  
  98.         /// < returns>< /returns>  
  99.         private MemoryStream ByteToStream(byte[] mybyte)  
  100.         {  
  101.             MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);  
  102.             return mymemorystream;  
  103.         }  
  104.         #endregion  
  105.  
  106.         #region 將byte轉換成Image文件  
  107.         /**//// < summary>  
  108.         /// ASP.NET圖片加水?。簩yte轉換成Image文件  
  109.         /// < /summary>  
  110.         /// < param name="mybyte">byte[]變量< /param>  
  111.         /// < returns>< /returns>  
  112.         private System.Drawing.Image SetByteToImage(byte[] mybyte)  
  113.         {  
  114.             System.Drawing.Image image;  
  115.             MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length);  
  116.             image = System.Drawing.Image.FromStream(mymemorystream);  
  117.             return image;  
  118.         }  
  119.         #endregion  
  120.  
  121.  
  122.         #region 批量在圖片上添加透明水印文字  
  123.         /**//// < summary>  
  124.         /// ASP.NET圖片加水?。号吭趫D片上添加透明水印文字  
  125.         /// < /summary>  
  126.         /// < param name="arrsourcePicture">原來圖片地址(路徑+文件名)< /param>  
  127.         /// < param name="waterWords">需要添加到圖片上的文字< /param>  
  128.         /// < param name="alpha">透明度(0.1~1.0之間)< /param>  
  129.         /// < param name="position">文字顯示的位置< /param>  
  130.         /// < param name="fRewrite">是否覆蓋原圖片(如果不覆蓋,那么將在同目錄下生成一個文件名帶0607的文件)< /param>  
  131.         /// < returns>< /returns>  
  132.         public bool DrawWords(string[] arrsourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite)  
  133.         {  
  134.             foreach (string imgPath in arrsourcePicture)  
  135.             {  
  136.                 if (!DrawWords(imgPath, waterWords, alpha, position, fRewrite))  
  137.                 {  
  138.                     _ErrMsg += "——處理文件:" + imgPath + " 時出錯。";  
  139.                     return false;  
  140.                 }  
  141.             }  
  142.             return true;  
  143.         }  
  144.         #endregion  
  145.  
  146.         #region 在圖片上添加透明水印文字  
  147.         /**//// < summary>  
  148.         /// ASP.NET圖片加水?。涸趫D片上添加透明水印文字  
  149.         /// < /summary>  
  150.         /// < param name="sourcePicture">原來圖片地址(路徑+文件名)< /param>  
  151.         /// < param name="waterWords">需要添加到圖片上的文字< /param>  
  152.         /// < param name="alpha">透明度(0.1~1.0之間)< /param>  
  153.         /// < param name="position">文字顯示的位置< /param>  
  154.         /// < param name="fRewrite">是否覆蓋原圖片(如果不覆蓋,那么將在同目錄下生成一個文件名帶0607的文件)< /param>  
  155.         /// < returns>< /returns>  
  156.         public bool DrawWords(string sourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite)  
  157.         {  
  158.             if (!System.IO.File.Exists(sourcePicture))  
  159.             {  
  160.                 _ErrMsg = "文件不存在!";  
  161.                 return false;  
  162.             }  
  163.             string fileExtension = System.IO.Path.GetExtension(sourcePicture).ToLower();  
  164.             if (fileExtension != ".gif" && fileExtension != ".jpg" && fileExtension != ".png" && fileExtension != ".bmp")  
  165.             {  
  166.                 _ErrMsg = "不是圖片文件!";  
  167.                 return false;  
  168.             }  
  169.  
  170.             Image imgPhoto = null;  
  171.             Bitmap bmPhoto = null;  
  172.             Graphics grPhoto = null;  
  173.             try 
  174.             {  
  175.                 //創建一個圖片對象用來裝載要被添加水印的圖片  
  176.                 imgPhoto = Image.FromStream(ByteToStream(SetImageToByteArray(sourcePicture)));  
  177.  
  178.                 //獲取圖片的寬和高  
  179.                 int phWidth = imgPhoto.Width;  
  180.                 int phHeight = imgPhoto.Height;  
  181.  
  182.                 //建立一個bitmap,和我們需要加水印的圖片一樣大小  
  183.                 bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);  
  184.  
  185.                 //SetResolution:設置此 Bitmap 的分辨率  
  186.                 //這里直接將我們需要添加水印的圖片的分辨率賦給了bitmap  
  187.                 bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);  
  188.  
  189.                 //Graphics:封裝一個 GDI+ 繪圖圖面。  
  190.                 grPhoto = Graphics.FromImage(bmPhoto);  
  191.  
  192.                 //設置圖形的品質  
  193.                 grPhoto.SmoothingMode = SmoothingMode.AntiAlias;  
  194.  
  195.                 //將我們要添加水印的圖片按照原始大小描繪(復制)到圖形中  
  196.                 grPhoto.DrawImage(  
  197.                  imgPhoto,                                           //   要添加水印的圖片  
  198.                  new Rectangle(0, 0, phWidth, phHeight), //  根據要添加的水印圖片的寬和高  
  199.                  0,                                                     //  X方向從0點開始描繪  
  200.                  0,                                                     // Y方向   
  201.                  phWidth,                                            //  X方向描繪長度  
  202.                  phHeight,                                           //  Y方向描繪長度  
  203.                  GraphicsUnit.Pixel);                              // 描繪的單位,這里用的是像素  
  204.  
  205.                 //根據圖片的大小我們來確定添加上去的文字的大小  
  206.                 //在這里我們定義一個數組來確定  
  207.                 int[] sizes = new int[] { 48, 36, 28, 24, 16, 14, 12, 10 };  
  208.  
  209.                 //字體  
  210.                 Font crFont = null;  
  211.                 //矩形的寬度和高度,SizeF有三個屬性,分別為Height高,width寬,IsEmpty是否為空  
  212.                 SizeF crSize = new SizeF();  
  213.  
  214.                 //利用一個循環語句來選擇我們要添加文字的型號  
  215.                 //直到它的長度比圖片的寬度小  
  216.                 for (int i = 0; i <  sizes.Length; i++)  
  217.                 {  
  218.                     crFont = new Font("arial", sizes[i], FontStyle.Bold);  
  219.  
  220.                     //測量用指定的 Font 對象繪制并用指定的 StringFormat 對象格式化的指定字符串。  
  221.                     crSize = grPhoto.MeasureString(waterWords, crFont);  
  222.  
  223.                     // ushort 關鍵字表示一種整數數據類型  
  224.                     if ((ushort)crSize.Width <  (ushort)phWidth)  
  225.                         break;  
  226.                 }  
  227.  
  228.                 //截邊5%的距離,定義文字顯示(由于不同的圖片顯示的高和寬不同,所以按百分比截取)  
  229.                 int yPixlesFromBottom = (int)(phHeight * .05);  
  230.  
  231.                 //定義在圖片上文字的位置  
  232.                 float wmHeight = crSize.Height;  
  233.                 float wmWidth = crSize.Width;  
  234.  
  235.                 float xPosOfWm;  
  236.                 float yPosOfWm;  
  237.  
  238.                 //設置水印的位置  
  239.                 switch (position)  
  240.                 {  
  241.                     case ImagePosition.BottomMiddle:  
  242.                         xPosOfWm = phWidth / 2;  
  243.                         yPosOfWm = phHeight - wmHeight - 10;  
  244.                         break;  
  245.                     case ImagePosition.Center:  
  246.                         xPosOfWm = phWidth / 2;  
  247.                         yPosOfWm = phHeight / 2;  
  248.                         break;  
  249.                     case ImagePosition.LeftBottom:  
  250.                         xPosOfWm = wmWidth;  
  251.                         yPosOfWm = phHeight - wmHeight - 10;  
  252.                         break;  
  253.                     case ImagePosition.LeftTop:  
  254.                         xPosOfWm = wmWidth / 2;  
  255.                         yPosOfWm = wmHeight / 2;  
  256.                         break;  
  257.                     case ImagePosition.RightTop:  
  258.                         xPosOfWm = phWidth - wmWidth - 10;  
  259.                         yPosOfWm = wmHeight;  
  260.                         break;  
  261.                     case ImagePosition.RigthBottom:  
  262.                         xPosOfWm = phWidth - wmWidth - 10;  
  263.                         yPosOfWm = phHeight - wmHeight - 10;  
  264.                         break;  
  265.                     case ImagePosition.TopMiddle:  
  266.                         xPosOfWm = phWidth / 2;  
  267.                         yPosOfWm = wmWidth;  
  268.                         break;  
  269.                     default:  
  270.                         xPosOfWm = wmWidth;  
  271.                         yPosOfWm = phHeight - wmHeight - 10;  
  272.                         break;  
  273.                 }  
  274.                 //封裝文本布局信息(如對齊、文字方向和 Tab ??课唬@示操作(如省略號插入和國家標準 (National) 數字替換)和 OpenType 功能。  
  275.                 StringFormat StrFormat = new StringFormat();  
  276.  
  277.                 //定義需要印的文字居中對齊  
  278.                 StrFormat.Alignment = StringAlignment.Center;  
  279.  
  280.                 //SolidBrush:定義單色畫筆。畫筆用于填充圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑。  
  281.                 //這個畫筆為描繪陰影的畫筆,呈灰色  
  282.                 int m_alpha = Convert.ToInt32(256 * alpha);  
  283.                 SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0));  
  284.  
  285.                 //描繪文字信息,這個圖層向右和向下偏移一個像素,表示陰影效果  
  286.                 //DrawString 在指定矩形并且用指定的 Brush 和 Font 對象繪制指定的文本字符串。  
  287.                 grPhoto.DrawString(waterWords,                                    //string of text  
  288.                                            crFont,                                         //font  
  289.                                            semiTransBrush2,                            //Brush  
  290.                                            new PointF(xPosOfWm + 1, yPosOfWm + 1),  //Position  
  291.                                            StrFormat);  
  292.  
  293.                 //從四個 ARGB 分量(alpha、紅色、綠色和藍色)值創建 Color 結構,這里設置透明度為153  
  294.                 //這個畫筆為描繪正式文字的筆刷,呈白色  
  295.                 SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));  
  296.  
  297.                 //第二次繪制這個圖形,建立在第一次描繪的基礎上  
  298.                 grPhoto.DrawString(waterWords,                 //string of text  
  299.                                            crFont,                                   //font  
  300.                                            semiTransBrush,                           //Brush  
  301.                                            new PointF(xPosOfWm, yPosOfWm),  //Position  
  302.                                            StrFormat);  
  303.  
  304.                 //imgPhoto是我們建立的用來裝載最終圖形的Image對象  
  305.                 //bmPhoto是我們用來制作圖形的容器,為Bitmap對象  
  306.                 imgPhoto = bmPhoto;  
  307.                 //釋放資源,將定義的Graphics實例grPhoto釋放,grPhoto功德圓滿  
  308.                 //grPhoto.Dispose();  
  309.  
  310.                 //將grPhoto保存  
  311.                 if (fRewrite)  
  312.                 {  
  313.                     imgPhoto.Save(sourcePicture);  
  314.                 }  
  315.                 else 
  316.                 {  
  317.                     // 目標圖片名稱及全路徑  
  318.                     string targetImage = sourcePicture.Replace(System.IO.Path.GetExtension(sourcePicture), "") + "_0607" + fileExtension;  
  319.                     imgPhoto.Save(targetImage);  
  320.                 }  
  321.                 //imgPhoto.Dispose();  
  322.                 return true;  
  323.             }  
  324.             catch (Exception ex)  
  325.             {  
  326.                 _ErrMsg = ex.Message;  
  327.                 return false;  
  328.             }  
  329.             finally 
  330.             {  
  331.                 if (imgPhoto != null)  
  332.                     imgPhoto.Dispose();  
  333.                 if (bmPhoto != null)  
  334.                     bmPhoto.Dispose();  
  335.                 if (grPhoto != null)  
  336.                     grPhoto.Dispose();  
  337.             }  
  338.  
  339.  
  340.         }  
  341.         #endregion  
  342.  
  343.     }  
  344. }  
  345.  

以上就是ASP.NET圖片加水印并處理水印位置和透明度的實現代碼。

本文來自wf5360308(峰)的博客。

【編輯推薦】

  1. ASP.NET(VB)應用之圖片增加水印文字淺析
  2. ASP.NET注釋使用技巧淺析
  3. ASP.NET trace的使用淺析
  4. ASP.NET trace在頁面執行中的應用淺析
  5. ASP.NET Request對象的屬性介紹
責任編輯:yangsai 來源: 百度空間
相關推薦

2009-08-12 14:10:37

asp.net分頁代碼

2009-07-29 16:06:42

圖片增加水印

2009-08-20 10:13:49

ASP.NET和C#的

2009-07-15 18:25:52

ASP.NET控件數組

2009-08-03 14:33:02

.NET平臺c#ASP.NET

2009-07-28 17:03:55

ASP.NET VB.

2009-08-10 17:17:10

ASP.NET安裝部署

2009-12-07 15:41:51

PHP圖片加水印

2015-06-23 16:47:53

ASP.NET

2016-09-06 21:09:35

Phpgd庫圖片水印

2009-08-05 16:59:55

ASP.NET組件設計

2009-08-13 17:52:27

C#數據采集

2012-04-06 13:52:58

ASP.NET

2009-08-04 11:29:14

HTML代碼ASP.NET控件

2009-08-04 17:16:16

ASP.NET代碼優化

2009-07-22 17:45:11

ASP.NET插件

2009-07-20 15:44:32

ASP.NET MVC

2009-07-27 14:13:56

調用c#方法Java scriptASP.NET

2011-06-21 10:26:37

2009-07-31 16:45:23

ASP.NET數據庫操
點贊
收藏

51CTO技術棧公眾號

免费观看日韩av| 销魂美女一区二区三区视频在线| 精品色蜜蜜精品视频在线观看| 日韩国产成人无码av毛片| 青青草国产成人a∨下载安卓| 国产亚洲xxx| 欧美午夜大胆人体| 一区二区三区四区视频精品免费| 凹凸日日摸日日碰夜夜爽1| 久久99精品国产麻豆不卡| 麻豆视频成人| 欧美日韩1080p| 亚洲在线免费视频| 欧美日韩在线网站| 国产精品美女av| 日韩电影免费网站| 国产精品人人做人人爽| 免费观看久久av| 日本中文字幕久久看| 欧美黑人做爰爽爽爽| 欧美精品性视频| www.国产精品一区| 日韩av电影手机在线| 精品在线播放| 成人精品视频99在线观看免费| 久久人人99| 国产精品日韩一区二区| 在线观看亚洲| 日本不卡一区| 国产在线乱码一区二区三区| 日本高清视频免费在线观看| 成人97人人超碰人人99| 日韩中文字幕免费在线| 中文字幕一区二区三| 中文字幕伊人| 欧美日韩国产精品自在自线| 波多野结衣在线观看| 亚洲性生活视频| 日韩精品久久久久久久软件91| 欧美综合激情网| 在线观看免费一区二区| 精品国产一区二区三区日日嗨| 成人国产视频在线| 成人av中文字幕| va中文字幕| 欧美三级韩国三级日本三斤| 热三久草你在线| 欧美理论电影在线播放| 国产麻豆精品久久| 欧美男人的天堂| 91免费看`日韩一区二区| 中文字幕高清在线| 精品国产伦一区二区三区观看方式| www.综合| 欧美性做爰毛片| 激情偷拍久久| 免费看欧美黑人毛片| 亚洲欧美日韩国产手机在线 | 国产1区2区在线| 亚洲午夜国产一区99re久久| a黄色片在线观看| 欧美成人高清视频| 亚洲综合图片| 欧美激情久久久久久久久久久| 91久久在线观看| 精品无码三级在线观看视频| 99re在线视频免费观看| 色94色欧美sute亚洲线路一ni | 中文字幕区一区二区三| 亚洲一区二区三区毛片| 国产乱国产乱300精品| 偷偷要色偷偷| 在线观看91久久久久久| 天天做天天爱综合| 国模吧无码一区二区三区| 午夜不卡av免费| 9999精品免费视频| 鲁鲁狠狠狠7777一区二区| 国产欧美精品一区aⅴ影院| 91麻豆免费在线视频| 欧美专区在线视频| 九色|91porny| 欧美男男激情freegay| 美女久久久久久久| 日韩电影免费在线| av女同在线| 超碰日本道色综合久久综合| 销魂美女一区二区三区视频在线| 成人女性文胸| 亚洲国产欧美一区二区丝袜黑人| 国产九一精品| 18禁男女爽爽爽午夜网站免费| 欧美日韩成人在线一区| 日韩av不卡一区| 一区二区日本| 欧美色图免费看| 麻豆一区一区三区四区| 隔壁人妻偷人bd中字| 88在线观看91蜜桃国自产| 日韩精品不卡一区二区| 亚洲黄色小视频在线观看| 亚洲欧洲激情在线| 久久精品电影| 国产天堂在线| 成人福利在线视频| 1024成人网| 成人噜噜噜噜| www.日本在线视频| 欧美一区二区人人喊爽| 精品成人久久| 四虎在线视频| 国产精品激情自拍| 99久久久久久99| 欧美成a人片在线观看久| 日本午夜一区二区三区| 欧美亚洲一区二区在线| 综合天堂久久久久久久| 少妇激情av一区二区| 国产97在线视频| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧美综合久久久久久v动漫| 亚洲在线视频一区二区| 日韩欧美一区在线观看| 免费久久99精品国产自在现线| 成人在线国产精品| 精品一区二区在线播放| 91福利在线免费| 国产精品12p| 亚洲欧美一区二区三区在线 | 国产精品色呦呦| 视频精品国内| www精品久久| 久久精品国产96久久久香蕉| 成人av午夜影院| 91嫩草国产线观看亚洲一区二区 | 欧美高清在线观看| 国产欧美日韩不卡| 午夜先锋成人动漫在线| 一级毛片免费观看| 91在线视频一区| 欧洲av在线精品| 久久精品日产第一区二区| 黄视频在线免费看| 三年中国中文在线观看免费播放| 亚洲国产精品va在线看黑人| 国产精品456| 亚洲精品一二三**| 自拍偷拍第1页| 国产精品免费视频一区二区| 欧美一区二区网站| 日韩妆和欧美的一区二区| 欧美三级日韩三级国产三级| 韩国av一区| 在线观看a级片| 强伦女教师2:伦理在线观看| 亚洲天堂av图片| 国产目拍亚洲精品99久久精品| 极品美女一区二区三区| 国产免费a∨片在线观看不卡| 国语精品免费视频| 日韩精品极品视频| www.亚洲免费av| 日韩欧美国产大片| 国产黄色在线| 一区二区欧美日韩| 欧美乱大交做爰xxxⅹ性3| 樱桃视频在线观看一区| 亚洲三级免费| 成人在线啊v| 中出在线观看| 天堂精品一区二区三区| 日韩一区二区福利| 亚洲精品伦理在线| 免费在线成人| 高清精品xnxxcom| 婷婷成人激情| 欧美一级欧美一级| 国产一区二区丝袜| 亚洲美女精品成人在线视频| 亚洲欧洲日产国产综合网| 一本一本久久| 中文一区二区三区四区| 蜜桃成人在线视频| 成人免费精品视频| 国产亚洲精品超碰| 欧美国产一区二区在线观看| 自拍在线观看| 宅男噜噜噜66国产精品免费| 国产99久久精品一区二区300| 久久午夜av| 精品久久久久久久久久岛国gif| 在线播放av片| 日本少妇高潮喷水视频| 成人黄色av网| 日韩在线观看免费全| 欧美日韩免费视频| 国产婷婷精品av在线| 西西人体一区二区| 精品视频99| 国产精品一区二区精品|