如何实现将用户上传的文件生成缩略图

时间:2022-01-30 23:22:05

//定义image类的对象
  System.Drawing.Image image,newimage;
  //图片路径
  protected string imagePath;
  //图片类型
  protected string imageType;
  //图片名称
  protected string imageName;
  //提供一个回调方法,用于确定Image对象在执行生成缩略图操作时何时提前取消执行
  //如果此方法确定 GetThumbnailImage 方法应提前停止执行,则返回 true;否则返回 false
  System.Drawing.Image.GetThumbnailImageAbort callb = null;

  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.btnUp.Click += new System.EventHandler(this.btnUp_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void btnUp_Click(object sender, System.EventArgs e)
  {
   string mPath;

   if("" != upImage.PostedFile.FileName)
   {
    imagePath= upImage.PostedFile.FileName;
    //取得图片类型
    imageType= imagePath.Substring(imagePath.LastIndexOf(".")+1);
    //取得图片名称
    imageName = imagePath.Substring(imagePath.LastIndexOf("//")+1);
    //判断是否是JPG或者GIF图片,这里只是举个例子,并不一定必须是这两种图片
    if("jpg" != imageType && "gif" != imageType)
    {
     Response.Write("<script language='javascript'> alert('对不起!请您选择jpg或者gif格式的图片!');</script>");
     return;
    }
    else
    {
     try
     {
      
      float oldW,oldH,newW,newH;
      //建立虚拟路径
      mPath=Server.MapPath("upFile");
      //保存到虚拟路径
      upImage.PostedFile.SaveAs(mPath+"//"+imageName);
      //显示原图
      imageSource.ImageUrl = "upFile/"+imageName;
      //为上传的图片建立引用
      image=System.Drawing.Image.FromFile(mPath+"//"+imageName); 
      oldW=image.Width;
      oldH=image.Height;
      if (oldW>oldH)
      {
       newW=100;
       newH=oldH/oldW*newW;
      
      }
      else
      {
      newH=100;
       newW=oldW/oldH*newH;
      
      }
      //生成缩略图
      newimage=image.GetThumbnailImage((int)newW,(int)newH,callb,new System.IntPtr());
      //把缩略图保存到指定的虚拟路径
      newimage.Save(Server.MapPath("upFile")+"//small"+imageName);
      //释放image对象占用的资源
      image.Dispose();
      //释放newimage对象的资源
      newimage.Dispose();
      //显示缩略图
      imageSmall.ImageUrl = "upFile/"+"small"+imageName;

      //Response.Write("上传成功!");
     }
     catch(Exception error)
     {
      Response.Write(error.ToString());
     }