Asp.Net 上傳圖片並生成高清晰縮略圖

首先要引入命名空間:using System.IO;
                             using System.Web.UI.HtmlControls;
                             using System.Drawing;

/// <summary>    

/// asp.net上傳圖片並生成縮略圖

   /// </summary>    

   /// <param name="upImage">HtmlInputFile控件</param>    

   /// <param name="sSavePath">保存的路徑,些爲相對服務器路徑的下的文件夾</param>    

   /// <param name="sThumbExtension">縮略圖的thumb</param>    

   /// <param name="intThumbWidth">生成縮略圖的寬度</param>    

   /// <param name="intThumbHeight">生成縮略圖的高度</param>    

   /// <returns>縮略圖名稱</returns>    

   public string UpLoadImage(HtmlInputFile upImage, string sSavePath, string sThumbExtension, int intThumbWidth, int intThumbHeight)    

   {    

       string sThumbFile = "";    

       string sFilename = "";            

  

       if (upImage.PostedFile != null)    

       {    

           HttpPostedFile myFile = upImage.PostedFile;    

           int nFileLen = myFile.ContentLength;    

           if (nFileLen == 0)    

               return "沒有選擇上傳圖片";                

  

           //獲取upImage選擇文件的擴展名    

           string extendName = System.IO.Path.GetExtension(myFile.FileName).ToLower();    

           //判斷是否爲圖片格式    

           if (extendName != ".jpg" && extendName != ".jpg" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png")    

               return "圖片格式不正確";    

               

  

           byte[] myData = new Byte[nFileLen];    

           myFile.InputStream.Read(myData, 0, nFileLen);    

  

           sFilename = System.IO.Path.GetFileName(myFile.FileName);    

           int file_append = 0;    

           //檢查當前文件夾下是否有同名圖片,有則在文件名+1    

           while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))    

           {    

               file_append++;    

               sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)    

                   + file_append.ToString() + extendName;    

           }    

           System.IO.FileStream newFile    

               = new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename),    

               System.IO.FileMode.Create, System.IO.FileAccess.Write);    

           newFile.Write(myData, 0, myData.Length);    

           newFile.Close();    

  

           //以上爲上傳原圖    

  

           try    

           {    

               //原圖加載    

               using (System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))    

               {    

                   //原圖寬度和高度    

                   int width = sourceImage.Width;    

                   int height = sourceImage.Height;    

                   int smallWidth;    

                   int smallHeight;    

  

                   //獲取第一張繪製圖的大小,(比較 原圖的寬/縮略圖的寬   原圖的高/縮略圖的高  

                   if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)    

                   {    

                       smallWidth = intThumbWidth;    

                       smallHeight = intThumbWidth * height / width;    

                   }    

                   else    

                   {    

                       smallWidth = intThumbHeight * width / height;    

                       smallHeight = intThumbHeight;    

                   }    

  

                   //判斷縮略圖在當前文件夾下是否同名稱文件存在    

                   file_append = 0;    

                   sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + extendName;    

  

                   while (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))    

                   {    

                       file_append++;    

                       sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +    

                           file_append.ToString() + extendName;    

                   }    

                   //縮略圖保存的絕對路徑    

                   string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile;    

  

                   //新建一個圖板,以最小等比例壓縮大小繪製原圖    

                   using (System.Drawing.Image bitmap = new System.Drawing.Bitmap(smallWidth, smallHeight))    

                   {    

                       //繪製中間圖    

                       using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))    

                       {    

                           //高清,平滑    

                           g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;    

                           g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;    

                           g.Clear(Color.Black);    

                           g.DrawImage(    

                           sourceImage,    

                           new System.Drawing.Rectangle(00, smallWidth, smallHeight),    

                           new System.Drawing.Rectangle(00, width, height),    

                           System.Drawing.GraphicsUnit.Pixel    

                           );    

                       }    

                       //新建一個圖板,以縮略圖大小繪製中間圖    

                       using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))    

                       {    

                           //繪製縮略圖    

                           using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))    

                           {    

                               //高清,平滑    

                               g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;    

                               g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;    

                               g.Clear(Color.Black);    

                               int lwidth = (smallWidth - intThumbWidth) / 2;    

                               int bheight = (smallHeight - intThumbHeight) / 2;    

                               g.DrawImage(bitmap, new Rectangle(00, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);    

                               g.Dispose();    

                               bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);    

                           }    

                       }    

                   }    

               }    

           }    

           catch    

           {    

               //出錯則刪除    

               System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));    

               return "圖片格式不正確";    

           }    

           //返回縮略圖名稱    

           return sThumbFile;    

       }    

       return "沒有選擇圖片";    

   }   

 這裏是頁面HTML代碼

<html xmlns="http://www.w3.org/1999/xhtml" >    

<head runat="server">    

    <title>無標題頁</title>    

</head>    

<body>    

    <form id="form1" runat="server">    

    <div>            

        <input id="File1" runat="server" type="file" /></div><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />    

    </form>    

</body>    

</html>    

 最近是調用代碼

 

 

    protected void Button1_Click(object sender, EventArgs e)    

    {    

        string a = this.UpLoadImage(this.File1, "UpLoad/""thumb_"118118);      

    }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章