asp.net2.0 上傳圖片(FileUpload控制元件) 並生成縮圖

iDotNetSpace發表於2010-01-26

記錄,備忘:

(1)

using System.IO; //新增

(2)

在頁面上放入一個FileUpload控制元件,id為“FileUpload1”,和一個“上傳”按鈕,id為“btnUpload”。

///


///
"上傳"按鈕
///
///
///
protected voidbtnUpload_Click(objectsender, EventArgse)
{
    stringserverPath = Server.MapPath("~/images/product");//設定圖片路徑

   
if(this.FileUpload1.HasFile)
    {
        stringname=FileUpload1.FileName;
        stringfName = this.txtImageName.Text;
        if(string.IsNullOrEmpty(fName))
        {
            fName = name;
        }
        stringtype = fName.Substring(fName.LastIndexOf(".") + 1).ToLower();           
        if(type == "jpg"|| type == "png"|| type == "bmp"|| type == "gif"|| type == "jpeg")
        {
            UpLoadImage(serverPath,fName);//執行上傳圖片,並生成縮圖
       
}
        else
      
{
            HttpContext.Current.Response.Write(");
            return;
        }
    }
    else
  
{
        HttpContext.Current.Response.Write("
alert('請選擇要上傳的檔案')
"
);
        return;
    }
    HttpContext.Current.Response.Write("
alert('檔案上傳成功')
"
);
}

///
///
執行上傳圖片操作,並生成縮圖
///
///
///
private voidUpLoadImage(stringserverPath, stringfName)
{
    if(!File.Exists(serverPath))
    {
         Directory.CreateDirectory(serverPath);
         Directory.CreateDirectory(serverPath + "_thumb");
    }
    stringfPath = serverPath + "\\"+ fName;//檔案實際路徑

    Stringtpath = serverPath + "_thumb\\"+ fName;//縮圖路徑 

    if(!File.Exists(tpath) && !File.Exists(fPath))
    {       
        
this.FileUpload1.SaveAs(fPath);//上傳到圖片路徑       
        
ImageClass.MakeThumbnail(fPath, tpath, 180, 117, "w"); //呼叫ImageClass類的MakeThumbnail()方法,生成縮圖
         this.myImage.ImageUrl = "~/images/product_thumb"+ "\\"+ fName;
    }
    else
  
{
         HttpContext.Current.Response.Write(");
         return;
    }
}

(3)ImageClass類(轉,網址忘記了)

//add
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web.UI;
usingSystem.IO;

///


///
生成縮圖
///
///
源圖路徑(物理路徑)
///
縮圖路徑(物理路徑)
///
縮圖寬度
///
縮圖高度
///
生成縮圖的方式 
public static voidMakeThumbnail(stringoriginalImagePath, stringthumbnailPath, intwidth, intheight, stringmode)
{
    System.Drawing.ImageoriginalImage = System.Drawing.Image.FromFile(originalImagePath);

    inttowidth = width;
    inttoheight = height;

    intx = 0;
    inty = 0;
    intow = originalImage.Width;
    intoh = originalImage.Height;

    if(ow < towidth && oh < toheight)
    {
        originalImage.Save(thumbnailPath);
    }
    else
  
{

        switch(mode.ToUpper())
        {
            case"HW"://指定高寬縮放(可能變形)         
               
break;
            case"W"://指定寬,高按比例           
               
toheight = originalImage.Height * width / originalImage.Width;
                break;
            case"H"://指定高,寬按比例
               
towidth = originalImage.Width * height / originalImage.Height;
                break;
            case"CUT"://指定高寬裁減(不變形)         
               
if((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                {
                    h = originalImage.Height;
                    w = originalImage.Height * towidth / toheight;
                    y = 0;
                    x = (originalImage.Width - ow) / 2;
                }
                else
              
{
                    w = originalImage.Width;
                    h = originalImage.Width * height / towidth;
                    x = 0;
                    y = (originalImage.Height - oh) / 2;
                }
                break;
            case"AUTO": //自動適應高度
               
if(ow > oh)
                {
                    //newwidth = 200;
                  
toheight = (int)((double)oh / (double)ow * (double)towidth);
                }
                else
              
{
                    //newheight = 200;
                  
towidth = (int)((double)ow / (double)oh * (double)toheight);
                }
                break;
            default:
                break;
        }

        //新建一個bmp圖片
       
System.Drawing.Imagebitmap = newSystem.Drawing.Bitmap(towidth, toheight);

        //新建一個畫板
       
System.Drawing.Graphicsg = System.Drawing.Graphics.FromImage(bitmap);

        //設定高質量插值法
       
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

        //設定高質量,低速度呈現平滑程度
       
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        //清空畫布並以透明背景色填充
       
g.Clear(System.Drawing.Color.Transparent);

        //在指定位置並且按指定大小繪製原圖片的指定部分
       
g.DrawImage(originalImage, newSystem.Drawing.Rectangle(0, 0, towidth, toheight),
            newSystem.Drawing.Rectangle(x, y, ow, oh),
            System.Drawing.GraphicsUnit.Pixel);

        try
      
{
            //以jpg格式儲存縮圖
           
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);

        }
        catch(System.Exceptione)
        {
            throwe;
        }
        finally
      
{

            bitmap.Dispose();
            g.Dispose();
        }
    }
    originalImage.Dispose();
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-626021/,如需轉載,請註明出處,否則將追究法律責任。

相關文章