asp.net2.0 上传图片(FileUpload控件) 并生成缩略图

记录,备忘:

(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();
}

posted on 2010-01-25 19:23  lihua好心情  阅读(480)  评论(2编辑  收藏  举报