asp.net2.0 上傳圖片(FileUpload控制項) 並產生縮圖

來源:互聯網
上載者:User

記錄,備忘:

(1)

using System.IO; //添加

(2)

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

/// <summary>
///"上傳"按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpload_Click(object sender, EventArgs e)
{
    string serverPath = Server.MapPath("~/images/product");//設定圖片路徑

    if(this.FileUpload1.HasFile)
    {
        string name=FileUpload1.FileName;
        string fName = this.txtImageName.Text; //新的圖片名稱,不填則使用原圖片名
        //string type=fName.Substring(fName.LastIndexOf(".")+1).ToLower();

string type = name.Substring(name.LastIndexOf(".") + 1).ToLower();

if(string.IsNullOrEmpty(fName)) 

        {
            fName = name;
        }
       else 

    fName += "." + type;

 

if(type == "jpg"|| type == "png"|| type == "bmp"|| type == "gif"|| type == "jpeg")
        {
            UpLoadImage(serverPath,fName);//執行上傳圖片,並產生縮圖
        }
        else
       {
            HttpContext.Current.Response.Write("<script>alert('圖片格式不對!');</script>");
            return;
        }
    }
    else
   {
        HttpContext.Current.Response.Write(" <script>alert('請選擇要上傳的檔案') </script>");
        return;
    }
    HttpContext.Current.Response.Write(" <script>alert('檔案上傳成功') </script>");
}

/// <summary>
///執行上傳圖片操作,並產生縮圖
/// </summary>
/// <param name="serverPath"></param>
/// <param name="fName"></param>
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("<script>alert('圖片已存在!');</script>");
         return;
    }
}

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

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

/// <summary>
///產生縮圖
/// </summary>
/// <param name="originalImagePath">源圖路徑(實體路徑)</param>
/// <param name="thumbnailPath">縮圖路徑(實體路徑)</param>
/// <param name="width">縮圖寬度</param>
/// <param name="height">縮圖高度</param>
/// <param name="mode">產生縮圖的方式</param> 
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)
                {
                    oh = originalImage.Height;
                    ow = originalImage.Height * towidth / toheight;
                    y = 0;
                    x = (originalImage.Width - ow) / 2;
                }
                else
               {
                    ow = originalImage.Width;
                    oh = 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();
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.