成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET圖片加水印的實(shí)現(xiàn)代碼(C#)

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

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

代碼分幾個(gè)部分,請(qǐng)查看代碼中的注釋。

  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 出錯(cuò)信息  
  54.         /**//// < summary>  
  55.         /// 出錯(cuò)信息  
  56.         /// < /summary>  
  57.         public string ErrMsg  
  58.         {  
  59.             get { return _ErrMsg; }  
  60.             set { _ErrMsg = value; }  
  61.         }  
  62.         #endregion  
  63.  
  64.  
  65.         #region 將文件轉(zhuǎn)換成流  
  66.         //public byte[] SetImageToByteArray(string fileName, ref string fileSize)  
  67.         /**//// < summary>  
  68.         /// 將文件轉(zhuǎn)換成流  
  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轉(zhuǎn)換成MemoryStream類型  
  94.         /**//// < summary>  
  95.         /// ASP.NET圖片加水?。簩yte轉(zhuǎn)換成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轉(zhuǎn)換成Image文件  
  107.         /**//// < summary>  
  108.         /// ASP.NET圖片加水?。簩yte轉(zhuǎn)換成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圖片加水印:批量在圖片上添加透明水印文字  
  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">是否覆蓋原圖片(如果不覆蓋,那么將在同目錄下生成一個(gè)文件名帶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 + " 時(shí)出錯(cuò)。";  
  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">是否覆蓋原圖片(如果不覆蓋,那么將在同目錄下生成一個(gè)文件名帶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.                 //創(chuàng)建一個(gè)圖片對(duì)象用來裝載要被添加水印的圖片  
  176.                 imgPhoto = Image.FromStream(ByteToStream(SetImageToByteArray(sourcePicture)));  
  177.  
  178.                 //獲取圖片的寬和高  
  179.                 int phWidth = imgPhoto.Width;  
  180.                 int phHeight = imgPhoto.Height;  
  181.  
  182.                 //建立一個(gè)bitmap,和我們需要加水印的圖片一樣大小  
  183.                 bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);  
  184.  
  185.                 //SetResolution:設(shè)置此 Bitmap 的分辨率  
  186.                 //這里直接將我們需要添加水印的圖片的分辨率賦給了bitmap  
  187.                 bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);  
  188.  
  189.                 //Graphics:封裝一個(gè) GDI+ 繪圖圖面。  
  190.                 grPhoto = Graphics.FromImage(bmPhoto);  
  191.  
  192.                 //設(shè)置圖形的品質(zhì)  
  193.                 grPhoto.SmoothingMode = SmoothingMode.AntiAlias;  
  194.  
  195.                 //將我們要添加水印的圖片按照原始大小描繪(復(fù)制)到圖形中  
  196.                 grPhoto.DrawImage(  
  197.                  imgPhoto,                                           //   要添加水印的圖片  
  198.                  new Rectangle(0, 0, phWidth, phHeight), //  根據(jù)要添加的水印圖片的寬和高  
  199.                  0,                                                     //  X方向從0點(diǎn)開始描繪  
  200.                  0,                                                     // Y方向   
  201.                  phWidth,                                            //  X方向描繪長度  
  202.                  phHeight,                                           //  Y方向描繪長度  
  203.                  GraphicsUnit.Pixel);                              // 描繪的單位,這里用的是像素  
  204.  
  205.                 //根據(jù)圖片的大小我們來確定添加上去的文字的大小  
  206.                 //在這里我們定義一個(gè)數(shù)組來確定  
  207.                 int[] sizes = new int[] { 48, 36, 28, 24, 16, 14, 12, 10 };  
  208.  
  209.                 //字體  
  210.                 Font crFont = null;  
  211.                 //矩形的寬度和高度,SizeF有三個(gè)屬性,分別為Height高,width寬,IsEmpty是否為空  
  212.                 SizeF crSize = new SizeF();  
  213.  
  214.                 //利用一個(gè)循環(huán)語句來選擇我們要添加文字的型號(hào)  
  215.                 //直到它的長度比圖片的寬度小  
  216.                 for (int i = 0; i <  sizes.Length; i++)  
  217.                 {  
  218.                     crFont = new Font("arial", sizes[i], FontStyle.Bold);  
  219.  
  220.                     //測(cè)量用指定的 Font 對(duì)象繪制并用指定的 StringFormat 對(duì)象格式化的指定字符串。  
  221.                     crSize = grPhoto.MeasureString(waterWords, crFont);  
  222.  
  223.                     // ushort 關(guān)鍵字表示一種整數(shù)數(shù)據(jù)類型  
  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.                 //設(shè)置水印的位置  
  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.                 //封裝文本布局信息(如對(duì)齊、文字方向和 Tab 停靠位),顯示操作(如省略號(hào)插入和國家標(biāo)準(zhǔn) (National) 數(shù)字替換)和 OpenType 功能。  
  275.                 StringFormat StrFormat = new StringFormat();  
  276.  
  277.                 //定義需要印的文字居中對(duì)齊  
  278.                 StrFormat.Alignment = StringAlignment.Center;  
  279.  
  280.                 //SolidBrush:定義單色畫筆。畫筆用于填充圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑。  
  281.                 //這個(gè)畫筆為描繪陰影的畫筆,呈灰色  
  282.                 int m_alpha = Convert.ToInt32(256 * alpha);  
  283.                 SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0));  
  284.  
  285.                 //描繪文字信息,這個(gè)圖層向右和向下偏移一個(gè)像素,表示陰影效果  
  286.                 //DrawString 在指定矩形并且用指定的 Brush 和 Font 對(duì)象繪制指定的文本字符串。  
  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.                 //從四個(gè) ARGB 分量(alpha、紅色、綠色和藍(lán)色)值創(chuàng)建 Color 結(jié)構(gòu),這里設(shè)置透明度為153  
  294.                 //這個(gè)畫筆為描繪正式文字的筆刷,呈白色  
  295.                 SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));  
  296.  
  297.                 //第二次繪制這個(gè)圖形,建立在第一次描繪的基礎(chǔ)上  
  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對(duì)象  
  305.                 //bmPhoto是我們用來制作圖形的容器,為Bitmap對(duì)象  
  306.                 imgPhoto = bmPhoto;  
  307.                 //釋放資源,將定義的Graphics實(shí)例grPhoto釋放,grPhoto功德圓滿  
  308.                 //grPhoto.Dispose();  
  309.  
  310.                 //將grPhoto保存  
  311.                 if (fRewrite)  
  312.                 {  
  313.                     imgPhoto.Save(sourcePicture);  
  314.                 }  
  315.                 else 
  316.                 {  
  317.                     // 目標(biāo)圖片名稱及全路徑  
  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圖片加水印并處理水印位置和透明度的實(shí)現(xiàn)代碼。

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

【編輯推薦】

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

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控件數(shù)組

2009-08-03 14:33:02

.NET平臺(tái)c#ASP.NET

2009-07-28 17:03:55

ASP.NET VB.

2015-06-23 16:47:53

ASP.NET

2009-08-10 17:17:10

ASP.NET安裝部署

2009-12-07 15:41:51

PHP圖片加水印

2016-09-06 21:09:35

Phpgd庫圖片水印

2009-08-05 16:59:55

ASP.NET組件設(shè)計(jì)

2009-08-13 17:52:27

C#數(shù)據(jù)采集

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代碼優(yōu)化

2009-07-22 17:45:11

ASP.NET插件

2009-07-20 15:44:32

ASP.NET MVC

2009-07-27 14:13:56

調(diào)用c#方法Java scriptASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-07-31 16:45:23

ASP.NET數(shù)據(jù)庫操
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品真实国产乱文在线 | 欧美又大粗又爽又黄大片视频 | 人人人人干 | 国产精品国产a级 | 日韩2020狼一二三 | 国产极品车模吞精高潮呻吟 | 亚洲精品成人网 | 久久久久久久国产精品视频 | 一区二区三区在线看 | 青青草视频网 | 亚洲品质自拍视频 | 日韩精品极品视频在线观看免费 | 欧美高清视频一区 | 亚洲精品在线视频 | 欧美成人第一页 | 久久久九九九九 | 视频在线亚洲 | 国产精品国产精品国产专区不卡 | 国产美女免费视频 | 国产精品成人在线 | 夜夜久久 | 拍真实国产伦偷精品 | 亚洲免费人成在线视频观看 | 狠狠久久 | 国产精品国产a | av资源在线看 | 羞羞网站在线免费观看 | 欧美一区二区三区久久精品视 | 国产精品美女久久久久久久网站 | 美女艹b| 天天久久 | 欧美国产在线一区 | 国产欧美三区 | 欧美精品第一区 | 国产a一区二区 | 国产在线1| 91视频久久 | 久久99精品久久久久久青青日本 | 中文字幕在线免费观看 | 日韩精品福利 | 99在线观看|