熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

使用FileUpload控件上傳圖片並自動生成縮略圖

2013-11-15 12:51:39  來源: ASP編程 

  本文借助vs中自帶的FileUpload控件實現圖片文件的上傳並生成縮略圖
   實現過程選擇圖片上傳成功後取得已經存在服務器的文件生成縮略圖並且判斷是否是圖片類型的文件這個的判斷可以在程序中修改本程序只是判斷了image/bmpimage/gifimage/pjpeg三種類型
   代碼如下
   upfileaspx文件
  <%@ Page Language=C# AutoEventWireup=true CodeFile=upfileaspxcs Inherits=upfile_upfile %>
  
  <!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN transitionaldtd>
  
  <html xmlns= >
  <head runat=server>
   <title>無標題頁</title>
  </head>
  <body>
   <form id=form runat=server>
   <div>
   <asp:FileUpload ID=FileUpload runat=server />
   <asp:Button ID=Button runat=server OnClick=Button_Click Text=上傳 /><br />
   <asp:Label ID=Label runat=server></asp:Label></div>
   </form>
  </body>
  </html>
   upfileaspxcs文件
  using System;
  using SystemData;
  using SystemConfiguration;
  using SystemCollections;
  using SystemWeb;
  using SystemWebSecurity;
  using SystemWebUI;
  using SystemWebUIWebControls;
  using SystemWebUIWebControlsWebParts;
  using SystemWebUIHtmlControls;
  using SystemIO;
  
  public partial class upfile_upfile : SystemWebUIPage
  {
   protected void Page_Load(object sender EventArgs e)
   { }
  
   protected void Button_Click(object sender EventArgs e)
   {
   if (FileUploadHasFile)
   {
   string fileContentType = FileUploadPostedFileContentType;
   if (fileContentType == image/bmp || fileContentType == image/gif || fileContentType == image/pjpeg)
   {
   string name = FileUploadPostedFileFileName; // 客戶端文件路徑
  
   FileInfo file = new FileInfo(name);
   string fileName = fileName; // 文件名稱
   string fileName_s = s_ + fileName; // 縮略圖文件名稱
   string fileName_sy = sy_ + fileName; // 水印圖文件名稱(文字)
   string fileName_syp = syp_ + fileName; // 水印圖文件名稱(圖片)
   string webFilePath = ServerMapPath(file/ + fileName); // 服務器端文件路徑
   string webFilePath_s = ServerMapPath(file/ + fileName_s);  // 服務器端縮略圖路徑
   string webFilePath_sy = ServerMapPath(file/ + fileName_sy); // 服務器端帶水印圖路徑(文字)
   string webFilePath_syp = ServerMapPath(file/ + fileName_syp); // 服務器端帶水印圖路徑(圖片)
   string webFilePath_sypf = ServerMapPath(file/shuiyinjpg); // 服務器端水印圖路徑(圖片)
  
   if (!FileExists(webFilePath))
   {
   try
   {
   FileUploadSaveAs(webFilePath); // 使用 SaveAs 方法保存文件
   AddShuiYinWord(webFilePath webFilePath_sy);
   AddShuiYinPic(webFilePath webFilePath_syp webFilePath_sypf);
   MakeThumbnail(webFilePath webFilePath_s Cut); // 生成縮略圖方法
   LabelText = 提示文件 + fileName + 成功上傳並生成 + fileName_s + 縮略圖文件類型為 + FileUploadPostedFileContentType + 文件大小為 + FileUploadPostedFileContentLength + B;
   }
   catch (Exception ex)
   {
   LabelText = 提示文件上傳失敗失敗原因 + exMessage;
   }
   }
   else
   {
   LabelText = 提示文件已經存在請重命名後上傳;
   }
   }
   else
   {
   LabelText = 提示文件類型不符;
   }
   }
   }
 

  /**//// <summary>
   /// 生成縮略圖
   /// </summary>
   /// <param name=originalImagePath>源圖路徑(物理路徑)</param>
   /// <param name=thumbnailPath>縮略圖路徑(物理路徑)</param>
   /// <param name=width>縮略圖寬度</param>
   /// <param name=height>縮略圖高度</param>
   /// <param name=mode>生成縮略圖的方式</param>
   public static void MakeThumbnail(string originalImagePath string thumbnailPath int width int height string mode)
   {
   SystemDrawingImage originalImage = SystemDrawingImageFromFile(originalImagePath);
  
   int towidth = width;
   int toheight = height;
  
   int x = ;
   int y = ;
   int ow = originalImageWidth;
   int oh = originalImageHeight;
  
   switch (mode)
   {
   case HW://指定高寬縮放(可能變形)
   break;
   case W://指定寬高按比例
   toheight = originalImageHeight * width / originalImageWidth;
   break;
   case H://指定高寬按比例
   towidth = originalImageWidth * height / originalImageHeight;
   break;
   case Cut://指定高寬裁減(不變形)
   if ((double)originalImageWidth / (double)originalImageHeight > (double)towidth / (double)toheight)
   {
   oh = originalImageHeight;
   ow = originalImageHeight * towidth / toheight;
   y = ;
   x = (originalImageWidth ow) / ;
   }
   else
   {
   ow = originalImageWidth;
   oh = originalImageWidth * height / towidth;
   x = ;
   y = (originalImageHeight oh) / ;
   }
   break;
   default:
   break;
   }
  
   //新建一個bmp圖片
   SystemDrawingImage bitmap = new SystemDrawingBitmap(towidth toheight);
  
   //新建一個畫板
   SystemDrawingGraphics g = SystemDrawingGraphicsFromImage(bitmap);
  
   //設置高質量插值法
   gInterpolationMode = SystemDrawingDrawingDInterpolationModeHigh;
  
   //設置高質量低速度呈現平滑程度
   gSmoothingMode = SystemDrawingDrawingDSmoothingModeHighQuality;
  
   //清空畫布並以透明背景色填充
   gClear(SystemDrawingColorTransparent);
  
   //在指定位置並且按指定大小繪制原圖片的指定部分
   gDrawImage(originalImage new SystemDrawingRectangle( towidth toheight)
   new SystemDrawingRectangle(x y ow oh)
   SystemDrawingGraphicsUnitPixel);
  
   try
   {
   //以jpg格式保存縮略圖
   bitmapSave(thumbnailPath SystemDrawingImagingImageFormatJpeg);
   }
   catch (SystemException e)
   {
   throw e;
   }
   finally
   {
   originalImageDispose();
   bitmapDispose();
   gDispose();
   }
   }
  
   /**//// <summary>
   /// 在圖片上增加文字水印
   /// </summary>
   /// <param name=Path>原服務器圖片路徑</param>
   /// <param name=Path_sy>生成的帶文字水印的圖片路徑</param>
   protected void AddShuiYinWord(string Path string Path_sy)
   {
   string addText = 測試水印;
   SystemDrawingImage image = SystemDrawingImageFromFile(Path);
   SystemDrawingGraphics g = SystemDrawingGraphicsFromImage(image);
   gDrawImage(image imageWidth imageHeight);
   SystemDrawingFont f = new SystemDrawingFont(Verdana );
   SystemDrawingBrush b = new SystemDrawingSolidBrush(SystemDrawingColorBlue);
  
   gDrawString(addText f b );
   gDispose();
  
   imageSave(Path_sy);
   imageDispose();
   }
  
   /**//// <summary>
   /// 在圖片上生成圖片水印
   /// </summary>
   /// <param name=Path>原服務器圖片路徑</param>
   /// <param name=Path_syp>生成的帶圖片水印的圖片路徑</param>
   /// <param name=Path_sypf>水印圖片路徑</param>
   protected void AddShuiYinPic(string Path string Path_syp string Path_sypf)
   {
   SystemDrawingImage image = SystemDrawingImageFromFile(Path);
   SystemDrawingImage copyImage = SystemDrawingImageFromFile(Path_sypf);
   SystemDrawingGraphics g = SystemDrawingGraphicsFromImage(image);
   gDrawImage(copyImage new SystemDrawingRectangle(imageWidth copyImageWidth imageHeight copyImageHeight copyImageWidth copyImageHeight) copyImageWidthcopyImageHeight SystemDrawingGraphicsUnitPixel);
   gDispose();
  
   imageSave(Path_syp);
   imageDispose();
   }
  }
  


From:http://tw.wingwit.com/Article/program/ASP/201311/21767.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.