zoukankan      html  css  js  c++  java
  • C# 上传文件

    有个博友问多个文件上传的问题,正好最近我也遇见这样的问题,刚好解决,费了好大的劲儿呀!终于皇天不负有心人啊,写到上边也让自己记住,希望这对那位博友有所帮助吧,也希望各位大牛看到后提出意见。大家互相学习,共同努力,加油!好了废话不多说了,开始吧,上例子。

    View Code
       1 1.最简单的单文件上传(没花头)
       2 
       3 效果图:
       4 
       5 说明:这是最基本的文件上传,在asp.Net1.x中没有这个FileUpload控件,只有html的上传控件,那时候要把html控件转化为服务器控件,很不好用。其实所有文件上传的美丽效果都是从这个FileUpload控件衍生,第一个例子虽然简单却是根本。
       6 
       7 后台代码:
       8 using System;
       9 using System.Data;
      10 using System.Configuration;
      11 using System.Collections;
      12 using System.Web;
      13 using System.Web.Security;
      14 using System.Web.UI;
      15 using System.Web.UI.WebControls;
      16 using System.Web.UI.WebControls.WebParts;
      17 using System.Web.UI.HtmlControls;
      18 
      19 public partial class _Default : System.Web.UI.Page
      20 {
      21     protected void Page_Load(object sender, EventArgs e)
      22     {
      23 
      24     }
      25     protected void bt_upload_Click(object sender, EventArgs e)
      26     {
      27         try
      28         {
      29             if (FileUpload1.PostedFile.FileName == "")
      30             {
      31                 this.lb_info.Text = "请选择文件!";
      32             }
      33             else
      34             {
      35                 string filepath = FileUpload1.PostedFile.FileName;
      36                 string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
      37                 string serverpath = Server.MapPath("images/") + filename;
      38                 FileUpload1.PostedFile.SaveAs(serverpath);
      39                 this.lb_info.Text = "上传成功!";
      40             }
      41         }
      42         catch (Exception ex)
      43         {
      44             this.lb_info.Text = "上传发生错误!原因是:" + ex.ToString();
      45         }
      46     }
      47 }
      48 
      49 前台代码:
      50  <table style=" 343px">
      51             <tr>
      52                 <td style=" 100px">
      53                     单文件上传</td>
      54                 <td style=" 100px">
      55                 </td>
      56             </tr>
      57             <tr>
      58                 <td style=" 100px">
      59                     <asp:FileUpload ID="FileUpload1" runat="server" Width="475px" />
      60                     </td>
      61                 <td style=" 100px">
      62                     <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="上传" /></td>
      63             </tr>
      64             <tr>
      65                 <td style=" 100px; height: 21px;">
      66                     <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
      67                 <td style=" 100px; height: 21px">
      68                 </td>
      69             </tr>
      70         </table>
      71 
      72 2.多文件上传
      73 
      74 效果图:
      75 
      76 
      77 后台代码:
      78 using System;
      79 using System.Data;
      80 using System.Configuration;
      81 using System.Collections;
      82 using System.Web;
      83 using System.Web.Security;
      84 using System.Web.UI;
      85 using System.Web.UI.WebControls;
      86 using System.Web.UI.WebControls.WebParts;
      87 using System.Web.UI.HtmlControls;
      88 
      89 public partial class _Default : System.Web.UI.Page
      90 {
      91     protected void Page_Load(object sender, EventArgs e)
      92     {
      93 
      94     }
      95     protected void bt_upload_Click(object sender, EventArgs e)
      96     {
      97         
      98             if ((FileUpload1.PostedFile.FileName == "" && FileUpload2.PostedFile.FileName == "")&&FileUpload3.PostedFile.FileName == "")
      99             {
     100                 this.lb_info.Text = "请选择文件!";
     101             }
     102             else
     103             {
     104                 HttpFileCollection myfiles = Request.Files;
     105                 for (int i = 0; i < myfiles.Count; i++)
     106                 {
     107                     HttpPostedFile mypost = myfiles[i];
     108                     try
     109                     {
     110                         if (mypost.ContentLength > 0)
     111                         {
     112                              string filepath = mypost.FileName;
     113                              string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
     114                              string serverpath = Server.MapPath("images/") + filename;
     115                              mypost.SaveAs(serverpath);
     116                              this.lb_info.Text = "上传成功!";
     117                         }
     118                     }
     119                     catch (Exception error)
     120                     {
     121                         this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
     122                     }
     123 
     124                 }
     125                
     126             }
     127         }
     128        
     129     }
     130 
     131 前台代码:
     132  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
     133 
     134 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     135 
     136 <html Xmlns="http://www.w3.org/1999/xhtml" >
     137 <head runat="server">
     138     <title>多文件上传 清清月儿http://blog.csdn.Net/21as.Net/</title>
     139 </head>
     140 <body>
     141     <form id="form1" runat="server">
     142     <div>
     143         <table style=" 343px">
     144             <tr>
     145                 <td style=" 100px">
     146                     多文件上传</td>
     147                 <td style=" 100px">
     148                 </td>
     149             </tr>
     150             <tr>
     151                 <td style=" 100px">
     152                     <asp:FileUpload ID="FileUpload1" runat="server" Width="475px" />
     153                     </td>
     154                 <td style=" 100px">
     155                     </td>
     156             </tr>
     157             <tr>
     158                 <td style=" 100px">
     159                     <asp:FileUpload ID="FileUpload2" runat="server" Width="475px" /></td>
     160                 <td style=" 100px">
     161                 </td>
     162             </tr>
     163             <tr>
     164                 <td style=" 100px">
     165                     <asp:FileUpload ID="FileUpload3" runat="server" Width="475px" /></td>
     166                 <td style=" 100px">
     167                 </td>
     168             </tr>
     169             <tr>
     170                 <td style=" 100px">
     171                     <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="一起上传" />
     172                     <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
     173                 <td style=" 100px">
     174                 </td>
     175             </tr>
     176         </table>
     177     
     178     </div>
     179     </form>
     180 </body>
     181 </html>
     182 
     183 3.客户端检查上传文件类型(以上传图片为例)
     184 
     185 效果图:
     186 
     187 后台代码和1.最简单的单文件上传一样;
     188 前台代码:
     189 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
     190 
     191 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     192 
     193 <html Xmlns="http://www.w3.org/1999/xhtml" >
     194 <head runat="server">
     195     <title>清清月儿 .Net/21as.Nethttp://blog.csdn.Net/21as.Net</title>
     196 <script   language="Javascript">  
     197  function Check_FileType()
     198 {
     199 var str=document.getElementById("FileUpload1").value;
     200  var pos = str.lastIndexOf(".");
     201  var lastname = str.substring(pos,str.length)  
     202  if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")
     203  {
     204      alert("您上传的文件类型为"+lastname+",图片必须为.jpg,.gif类型");
     205      return false;
     206  }
     207  else 
     208  {
     209   return true;
     210  }
     211 } 
     212  </script>  
     213 
     214 </head>
     215 <body>
     216     <form id="form1" runat="server">
     217     <div>
     218         <table style=" 343px">
     219             <tr>
     220                 <td style=" 104px">
     221                     文件上传判断</td>
     222                 <td style=" 100px">
     223                 </td>
     224             </tr>
     225             <tr>
     226                 <td style=" 104px">
     227                     <asp:FileUpload ID="FileUpload1" runat="server" Width="400px" />
     228                     </td>
     229                 <td style=" 100px">
     230                     <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="上传"  OnClientClick="return Check_FileType()"/></td>
     231             </tr>
     232             <tr>
     233                 <td style=" 104px; height: 21px;">
     234                     <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
     235                 <td style=" 100px; height: 21px">
     236                 </td>
     237             </tr>
     238         </table>
     239     
     240     </div>
     241     </form>
     242 </body>
     243 </html>
     244 说明:点击上传时先触发客户端事件Check_FileType;
     245 
     246 4.服务器端检查上传文件类型(以上传图片为例)
     247 
     248 效果图:
     249 
     250 
     251 后台代码:
     252 using System;
     253 using System.Data;
     254 using System.Configuration;
     255 using System.Collections;
     256 using System.Web;
     257 using System.Web.Security;
     258 using System.Web.UI;
     259 using System.Web.UI.WebControls;
     260 using System.Web.UI.WebControls.WebParts;
     261 using System.Web.UI.HtmlControls;
     262 
     263 public partial class _Default : System.Web.UI.Page
     264 {
     265     protected void Page_Load(object sender, EventArgs e)
     266     {
     267 
     268     }
     269     protected void bt_upload_Click(object sender, EventArgs e)
     270     {
     271         try
     272         {
     273             if (FileUpload1.PostedFile.FileName == "")
     274             {
     275                 this.lb_info.Text = "请选择文件!";
     276             }
     277             else
     278             {
     279                 string filepath = FileUpload1.PostedFile.FileName;
     280                 if (IsAllowedExtension(FileUpload1) == true)
     281                 {
     282 
     283                     string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
     284                     string serverpath = Server.MapPath("images/") + filename;
     285                     FileUpload1.PostedFile.SaveAs(serverpath);
     286                     this.lb_info.Text = "上传成功!";
     287                 }
     288                 else 
     289                 {
     290                     this.lb_info.Text = "请上传图片";
     291                 }
     292             }
     293         }
     294         catch (Exception error)
     295         {
     296             this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
     297         }
     298     }
     299    public static bool IsAllowedExtension(FileUpload hifile)
     300     {
     301         string strOldFilePath = "", strExtension = "";
     302         string[] arrExtension =   { ".gif", ".jpg", ".jpeg", ".bmp", ".png" };
     303         if (hifile.PostedFile.FileName != string.Empty)
     304         {
     305             strOldFilePath = hifile.PostedFile.FileName;
     306             strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf("."));
     307             for (int i = 0; i < arrExtension.Length; i++)
     308             {
     309                 if (strExtension.Equals(arrExtension[i]))
     310                 {
     311                     return true;
     312                 }
     313             }
     314         }
     315         return false;
     316     }   
     317 
     318 }
     319 
     320 
     321  5.服务器端检查上传文件类型(可以检测真正文件名) 
     322 其实方法4并不好,因为用户可以把XXX.txt伪装为XXX.jpg。
     323 
     324 效果图:
     325 
     326 
     327 后台代码:
     328 using System;
     329 using System.Data;
     330 using System.Configuration;
     331 using System.Collections;
     332 using System.Web;
     333 using System.Web.Security;
     334 using System.Web.UI;
     335 using System.Web.UI.WebControls;
     336 using System.Web.UI.WebControls.WebParts;
     337 using System.Web.UI.HtmlControls;
     338 
     339 public partial class _Default : System.Web.UI.Page
     340 {
     341     //清清月儿 http://blog.csdn.Net/21as.Net
     342     protected void Page_Load(object sender, EventArgs e)
     343     {
     344 
     345     }
     346     protected void bt_upload_Click(object sender, EventArgs e)
     347     {
     348         try
     349         {
     350             if (FileUpload1.PostedFile.FileName == "")
     351             {
     352                 this.lb_info.Text = "请选择文件!";
     353             }
     354             else
     355             {
     356                 string filepath = FileUpload1.PostedFile.FileName;
     357                 if (IsAllowedExtension(FileUpload1) == true)
     358                 {
     359                     string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
     360                     string serverpath = Server.MapPath("images/") + filename;
     361                     FileUpload1.PostedFile.SaveAs(serverpath);
     362                     this.lb_info.Text = "上传成功!";
     363                 }
     364                 else 
     365                 {
     366                     this.lb_info.Text = "请上传图片";
     367                 }
     368             }
     369         }
     370         catch (Exception error)
     371         {
     372             this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
     373         }
     374     }
     375     public static bool IsAllowedExtension(FileUpload hifile)
     376     {
     377         System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
     378         System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
     379         string fileclass = "";
     380         byte buffer;
     381         try
     382         {
     383             buffer = r.ReadByte();
     384             fileclass = buffer.ToString();
     385             buffer = r.ReadByte();
     386             fileclass += buffer.ToString();
     387 
     388         }
     389         catch 
     390         {
     391            
     392         }
     393         r.Close();
     394         fs.Close();
     395         if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
     396         {
     397             return true;
     398         }
     399         else 
     400         {
     401             return false;
     402         }
     403 
     404     }   
     405 
     406 }
     407 
     408 6.上传文件文件名唯一性处理(时间戳+SessionID)
     409 
     410 效果图:
     411 
     412 说明:年月日时分秒+临时session+原文件名 如果大家怕还会重复可以加GUID
     413 后台代码:
     414 
     415 
     416 try
     417         {
     418             if (FileUpload1.PostedFile.FileName == "")
     419             {
     420                 this.lb_info.Text = "请选择文件!";
     421             }
     422             else
     423             {
     424                 string filepath = FileUpload1.PostedFile.FileName;
     425                 string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
     426                 string serverpath = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
     427                 FileUpload1.PostedFile.SaveAs(serverpath);
     428                 this.lb_info.Text = "上传成功!";
     429             }
     430         }
     431         catch (Exception error)
     432         {
     433             this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
     434         }
     435 
     436 注:GUID的方法:Guid myGuid=Guid.NewGuid();
     437 
     438 7.上传图片生成等比例缩略图
     439 
     440 效果图:
     441 
     442 
     443 缩略图代码:
     444 ImageThumbnail.cs
     445 using System;
     446 using System.IO;
     447 using System.Drawing;
     448 using System.Drawing.Imaging;
     449 
     450 public class ImageThumbnail
     451 {
     452     public Image ResourceImage;
     453     private int ImageWidth;
     454     private int ImageHeight;
     455     public string ErrorMessage;
     456 
     457     public ImageThumbnail(string ImageFileName)
     458     {
     459         ResourceImage = Image.FromFile(ImageFileName);
     460         ErrorMessage = "";
     461     }
     462 
     463     public bool ThumbnailCallback()
     464     {
     465         return false;
     466     }
     467 
     468 
     469     // 方法1,按大小
     470     public bool ReducedImage(int Width, int Height, string targetFilePath)
     471     {
     472         try
     473         {
     474             Image ReducedImage;
     475             Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
     476             ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
     477             ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
     478             ReducedImage.Dispose();
     479             return true;
     480         }
     481         catch (Exception e)
     482         {
     483             ErrorMessage = e.Message;
     484             return false;
     485         }
     486     }
     487 
     488 
     489     // 方法2,按百分比  缩小60% Percent为0.6 targetFilePath为目标路径
     490     public bool ReducedImage(double Percent, string targetFilePath)
     491     {
     492         try
     493         {
     494             Image ReducedImage;
     495             Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
     496             ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
     497             ImageHeight = (ResourceImage.Height)*ImageWidth/ ResourceImage.Width;//等比例缩放
     498             ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
     499             ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
     500             ReducedImage.Dispose();
     501             return true;
     502         }
     503         catch (Exception e)
     504         {
     505             ErrorMessage = e.Message;
     506             return false;
     507         }
     508     }
     509 
     510 
     511 }
     512 
     513 后台代码:
     514 using System;
     515 using System.Data;
     516 using System.Configuration;
     517 using System.Collections;
     518 using System.Web;
     519 using System.Web.Security;
     520 using System.Web.UI;
     521 using System.Web.UI.WebControls;
     522 using System.Web.UI.WebControls.WebParts;
     523 using System.Web.UI.HtmlControls;
     524 public partial class _Default : System.Web.UI.Page
     525 {
     526 
     527     protected void Page_Load(object sender, EventArgs e)
     528     {
     529 
     530     }
     531     protected void bt_upload_Click(object sender, EventArgs e)
     532     {
     533         try
     534         {
     535             if (FileUpload1.PostedFile.FileName == "")
     536             {
     537                 this.lb_info.Text = "请选择文件!";
     538             }
     539             else
     540             {
     541                 string filepath = FileUpload1.PostedFile.FileName;
     542                 string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
     543                 string serverpath1 = Server.MapPath("images/") + filename;
     544                 string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
     545                 FileUpload1.PostedFile.SaveAs(serverpath1);
     546                 ImageThumbnail img = new ImageThumbnail(filepath);
     547                 img.ReducedImage(0.4, serverpath2);//0.4表示缩小40%
     548                 this.lb_info.Text = "上传成功!";
     549             }
     550         }
     551         catch (Exception error)
     552         {
     553             this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
     554         }
     555     }
     556 
     557 
     558 }
     559 
     560 8.上传图片加水印(文字水印,图片水印,文字+图片水印)
     561 
     562 效果图:
     563 原图
     564 
     565 水印
     566 
     567 给图片加水印以后(注意右上角+正下方)
     568 
     569 
     570 代码:
     571 DrawImg.cs  出自http://www.codeproject.com/csharp/watermark.asp
     572 using System;
     573 using System.Drawing;
     574 using System.Drawing.Imaging;
     575 using System.Drawing.Drawing2D;
     576 public class DrawImg
     577 {
     578  private string  WorkingDirectory = string.Empty ; //路径
     579  private string  ImageName = string.Empty;   //被处理的图片
     580  private string  ImageWater = string.Empty;  //水印图片
     581  private string  FontString = string.Empty;  //水印文字
     582  
     583 
     584  enum DealType{NONE,WaterImage,WaterFont,DoubleDo}; //枚举命令
     585 
     586  private DealType dealtype;
     587  
     588 
     589  public DrawImg()
     590  {}
     591 
     592  public string PublicWorkingDirectory
     593  {
     594   get
     595   {
     596    return WorkingDirectory;
     597   }
     598   set
     599   {
     600    WorkingDirectory = value;
     601   }
     602  }
     603 
     604  public string PublicImageName
     605  {
     606   get
     607   {
     608    return ImageName;
     609   }
     610   set
     611   {
     612    ImageName = value;
     613   }
     614  }
     615 
     616 
     617  public string PublicImageWater 
     618  {
     619   get
     620   {
     621    return ImageWater;
     622   }
     623   set  //设置了水印图片的话说明是要水印图片效果的
     624   {
     625    dealtype = DealType.WaterImage;
     626    ImageWater = value;
     627   }
     628  }
     629 
     630  public string PublicFontString
     631  {
     632   get
     633   {
     634    return FontString;
     635   }
     636   set //设置了水印文字的话说明是要水印文字效果的
     637   {
     638    dealtype = DealType.WaterFont;
     639    FontString = value;
     640   }
     641  }
     642 
     643  
     644 
     645  public void DealImage()
     646  {
     647   IsDouble();
     648 
     649   switch( dealtype )
     650   {
     651    case DealType.WaterFont: WriteFont(); break;
     652    case DealType.WaterImage: WriteImg(); break;
     653    case DealType.DoubleDo: WriteFontAndImg(); break;
     654   }
     655 
     656  }
     657 
     658  private void IsDouble()
     659  {
     660   if(ImageWater+""!="" && FontString+""!="")
     661   {
     662             dealtype = DealType.DoubleDo;
     663   }
     664  }
     665 
     666  private void WriteFont()
     667  {
     668   //set a working directory
     669   //string WorkingDirectory = @"C:\Watermark_src\WaterPic";
     670 
     671   //define a string of text to use as the Copyright message
     672   //string Copyright = "Copyright ?2002 - AP Photo/David Zalubowski";
     673 
     674   //create a image object containing the photograph to watermark
     675   Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
     676   int phWidth = imgPhoto.Width;
     677   int phHeight = imgPhoto.Height;
     678 
     679   //create a Bitmap the Size of the original photograph
     680   Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
     681 
     682   bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     683 
     684   //load the Bitmap into a Graphics object 
     685   Graphics grPhoto = Graphics.FromImage(bmPhoto);
     686 
     687   //------------------------------------------------------------
     688   //Step #1 - Insert Copyright message
     689   //------------------------------------------------------------
     690 
     691   //Set the rendering quality for this Graphics object
     692   grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
     693 
     694   //Draws the photo Image object at original size to the graphics object.
     695   grPhoto.DrawImage(
     696    imgPhoto,                               // Photo Image object
     697    new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
     698    0,                                      // x-coordinate of the portion of the source image to draw. 
     699    0,                                      // y-coordinate of the portion of the source image to draw. 
     700    phWidth,                                // Width of the portion of the source image to draw. 
     701    phHeight,                               // Height of the portion of the source image to draw. 
     702    GraphicsUnit.Pixel);                    // Units of measure 
     703 
     704   //-------------------------------------------------------
     705   //to maximize the size of the Copyright message we will 
     706   //test multiple Font sizes to determine the largest posible 
     707   //font we can use for the width of the Photograph
     708   //define an array of point sizes you would like to consider as possiblities
     709   //-------------------------------------------------------
     710   int[] sizes = new int[]{16,14,12,10,8,6,4};
     711 
     712   Font crFont = null;
     713   SizeF crSize = new SizeF();
     714 
     715   //Loop through the defined sizes checking the length of the Copyright string
     716   //If its length in pixles is less then the image width choose this Font size.
     717   for (int i=0 ;i<7; i++)
     718   {
     719    //set a Font object to Arial (i)pt, Bold
     720    //crFont = new Font("arial", sizes[i], FontStyle.Bold);
     721 
     722    crFont = new Font("arial",sizes[i],FontStyle.Bold);
     723 
     724    //Measure the Copyright string in this Font
     725    crSize = grPhoto.MeasureString(FontString, crFont);
     726 
     727    if((ushort)crSize.Width < (ushort)phWidth)
     728     break;
     729   }
     730 
     731   //Since all photographs will have varying heights, determine a 
     732   //position 5% from the bottom of the image
     733   int yPixlesFromBottom = (int)(phHeight *.05);
     734 
     735   //Now that we have a point size use the Copyrights string height 
     736   //to determine a y-coordinate to draw the string of the photograph
     737   float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));
     738 
     739   //Determine its x-coordinate by calculating the center of the width of the image
     740   float xCenterOfImg = (phWidth/2);
     741 
     742   //Define the text layout by setting the text alignment to centered
     743   StringFormat StrFormat = new StringFormat();
     744   StrFormat.Alignment = StringAlignment.Center;
     745 
     746   //define a Brush which is semi trasparent black (Alpha set to 153)
     747   SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));
     748 
     749   //Draw the Copyright string
     750   grPhoto.DrawString(FontString,                 //string of text
     751    crFont,                                   //font
     752    semiTransBrush2,                           //Brush
     753    new PointF(xCenterOfImg+1,yPosFromBottom+1),  //Position
     754    StrFormat);
     755 
     756   //define a Brush which is semi trasparent white (Alpha set to 153)
     757   SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));
     758 
     759   //Draw the Copyright string a second time to create a shadow effect
     760   //Make sure to move this text 1 pixel to the right and down 1 pixel
     761   grPhoto.DrawString(FontString,                 //string of text
     762    crFont,         &nb, sp;                         //font
     763    semiTransBrush,                           //Brush
     764    new PointF(xCenterOfImg,yPosFromBottom),  //Position
     765    StrFormat);    
     766   
     767   imgPhoto = bmPhoto;
     768   grPhoto.Dispose();
     769 
     770   //save new image to file system.
     771   imgPhoto.Save(WorkingDirectory + ImageName + "_finally.jpg", ImageFormat.Jpeg);
     772   imgPhoto.Dispose();
     773   
     774   //Text alignment
     775  }
     776 
     777 
     778  private void WriteImg()
     779  {
     780   //set a working directory
     781   //string WorkingDirectory = @"C:\Watermark_src\WaterPic";
     782 
     783   //create a image object containing the photograph to watermark
     784   Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
     785   int phWidth = imgPhoto.Width;
     786   int phHeight = imgPhoto.Height;
     787 
     788   //create a Bitmap the Size of the original photograph
     789   Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
     790 
     791   bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     792 
     793   //load the Bitmap into a Graphics object 
     794   Graphics grPhoto = Graphics.FromImage(bmPhoto);
     795 
     796   //create a image object containing the watermark
     797   Image imgWatermark = new Bitmap(WorkingDirectory + ImageWater);
     798   int wmWidth = imgWatermark.Width;
     799   int wmHeight = imgWatermark.Height;
     800 
     801   //Set the rendering quality for this Graphics object
     802   grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
     803 
     804   //Draws the photo Image object at original size to the graphics object.
     805   grPhoto.DrawImage(
     806    imgPhoto,                               // Photo Image object
     807    new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
     808    0,                                      // x-coordinate of the portion of the source image to draw. 
     809    0,                                      // y-coordinate of the portion of the source image to draw. 
     810    phWidth,                                // Width of the portion of the source image to draw. 
     811    phHeight,                               // Height of the portion of the source image to draw. 
     812    GraphicsUnit.Pixel);                    // Units of measure 
     813 
     814 
     815   //------------------------------------------------------------
     816   //Step #2 - Insert Watermark image
     817   //------------------------------------------------------------
     818 
     819   //Create a Bitmap based on the previously modified photograph Bitmap
     820   Bitmap bmWatermark = new Bitmap(bmPhoto);
     821   bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     822   //Load this Bitmap into a new Graphic Object
     823   Graphics grWatermark = Graphics.FromImage(bmWatermark);
     824 
     825   //To achieve a transulcent watermark we will apply (2) color 
     826   //manipulations by defineing a ImageAttributes object and 
     827   //seting (2) of its properties.
     828   ImageAttributes imageAttributes = new ImageAttributes();
     829 
     830   //The first step in manipulating the watermark image is to replace 
     831   //the background color with one that is trasparent (Alpha=0, R=0, G=0, B=0)
     832   //to do this we will use a Colormap and use this to define a RemapTable
     833   ColorMap colorMap = new ColorMap();
     834 
     835   //My watermark was defined with a background of 100% Green this will
     836   //be the color we search for and replace with transparency
     837   colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
     838   colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); 
     839 
     840   ColorMap[] remapTable = {colorMap};
     841 
     842   imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
     843 
     844   //The second color manipulation is used to change the opacity of the 
     845   //watermark.  This is done by applying a 5x5 matrix that contains the 
     846   //coordinates for the RGBA space.  By setting the 3rd row and 3rd column 
     847   //to 0.3f we achive a level of opacity
     848   float[][] colorMatrixElements = { 
     849            new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},       
     850            new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},        
     851            new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},        
     852            new float[] {0.0f,  0.0f,  0.0f,  0.3f, 0.0f},        
     853            new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}}; 
     854   ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
     855 
     856   imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
     857    ColorAdjustType.Bitmap);
     858 
     859   //For this example we will place the watermark in the upper right
     860   //hand corner of the photograph. offset down 10 pixels and to the 
     861   //left 10 pixles
     862 
     863   int xPosOfWm = ((phWidth - wmWidth)-10);
     864   int yPosOfWm = 10;
     865 
     866   grWatermark.DrawImage(imgWatermark, 
     867    new Rectangle(xPosOfWm,yPosOfWm,wmWidth,wmHeight),  //Set the detination Position
     868    0,                  // x-coordinate of the portion of the source image to draw. 
     869    0,                  // y-coordinate of the portion of the source image to draw. 
     870    wmWidth,            // Watermark Width
     871    wmHeight,      // Watermark Height
     872    GraphicsUnit.Pixel, // Unit of measurment
     873    imageAttributes);   //ImageAttributes Object
     874 
     875   //Replace the original photgraphs bitmap with the new Bitmap
     876   imgPhoto = bmWatermark;
     877   grPhoto.Dispose();
     878   grWatermark.Dispose();
     879 
     880   //save new image to file system.
     881   imgPhoto.Save(WorkingDirectory + ImageName +"_finally.jpg", ImageFormat.Jpeg);
     882   imgPhoto.Dispose();
     883   imgWatermark.Dispose();
     884 
     885  }
     886 
     887 
     888  private void WriteFontAndImg()
     889  {  
     890   
     891   //create a image object containing the photograph to watermark
     892   Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
     893   int phWidth = imgPhoto.Width;
     894   int phHeight = imgPhoto.Height;
     895 
     896   //create a Bitmap the Size of the original photograph
     897   Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
     898 
     899   bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     900 
     901   //load the Bitmap into a Graphics object 
     902   Graphics grPhoto = Graphics.FromImage(bmPhoto);
     903 
     904   //create a image object containing the watermark
     905   Image imgWatermark = new Bitmap(WorkingDirectory + ImageWater);
     906   int wmWidth = imgWatermark.Width;
     907   int wmHeight = imgWatermark.Height;
     908 
     909   //------------------------------------------------------------
     910   //Step #1 - Insert Copyright message
     911   //------------------------------------------------------------
     912 
     913   //Set the rendering quality for this Graphics object
     914   grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
     915 
     916   //Draws the photo Image object at original size to the graphics object.
     917   grPhoto.DrawImage(
     918    imgPhoto,                               // Photo Image object
     919    new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
     920    0,                                      // x-coordinate of the portion of the source image to draw. 
     921    0,                                      // y-coordinate of the portion of the source image to draw. 
     922    phWidth,                                // Width of the portion of the source image to draw. 
     923    phHeight,                               // Height of the portion of the source image to draw. 
     924    GraphicsUnit.Pixel);                    // Units of measure 
     925 
     926   //-------------------------------------------------------
     927   //to maximize the size of the Copyright message we will 
     928   //test multiple Font sizes to determine the largest posible 
     929   //font we can use for the width of the Photograph
     930   //define an array of point sizes you would like to consider as possiblities
     931   //-------------------------------------------------------
     932   int[] sizes = new int[]{16,14,12,10,8,6,4};
     933 
     934   Font crFont = null;
     935   SizeF crSize = new SizeF();
     936 
     937   //Loop through the defined sizes checking the length of the Copyright string
     938   //If its length in pixles is less then the image width choose this Font size.
     939   for (int i=0 ;i<7; i++)
     940   {
     941    //set a Font object to Arial (i)pt, Bold
     942    crFont = new Font("arial", sizes[i], FontStyle.Bold);
     943    //Measure the Copyright string in this Font
     944    crSize = grPhoto.MeasureString(FontString, crFont);
     945 
     946    if((ushort)crSize.Width < (ushort)phWidth)
     947     break;
     948   }
     949 
     950   //Since all photographs will have varying heights, determine a 
     951   //position 5% from the bottom of the image
     952   int yPixlesFromBottom = (int)(phHeight *.05);
     953 
     954   //Now that we have a point size use the Copyrights string height 
     955   //to determine a y-coordinate to draw the string of the photograph
     956   float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));
     957 
     958   //Determine its x-coordinate by calculating the center of the width of the image
     959   float xCenterOfImg = (phWidth/2);
     960 
     961   //Define the text layout by setting the text alignment to centered
     962   StringFormat StrFormat = new StringFormat();
     963   StrFormat.Alignment = StringAlignment.Center;
     964 
     965   //define a Brush which is semi trasparent black (Alpha set to 153)
     966   SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));
     967 
     968   //Draw the Copyright string
     969   grPhoto.DrawString(FontString,                 //string of text
     970    crFont,                                   //font
     971    semiTransBrush2,                           //Brush
     972    new PointF(xCenterOfImg+1,yPosFromBottom+1),  //Position
     973    StrFormat);
     974 
     975   //define a Brush which is semi trasparent white (Alpha set to 153)
     976   SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));
     977 
     978   //Draw the Copyright string a second time to create a shadow effect
     979   //Make sure to move this text 1 pixel to the right and down 1 pixel
     980   grPhoto.DrawString(FontString,                 //string of text
     981    crFont,                                   //font
     982    semiTransBrush,                           //Brush
     983    new PointF(xCenterOfImg,yPosFromBottom),  //Position
     984    StrFormat);                               //Text alignment
     985 
     986    
     987 
     988   //------------------------------------------------------------
     989   //Step #2 - Insert Watermark image
     990   //------------------------------------------------------------
     991 
     992   //Create a Bitmap based on the previously modified photograph Bitmap
     993   Bitmap bmWatermark = new Bitmap(bmPhoto);
     994   bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
     995   //Load this Bitmap into a new Graphic Object
     996   Graphics grWatermark = Graphics.FromImage(bmWatermark);
     997 
     998   //To achieve a transulcent watermark we will apply (2) color 
     999   //manipulations by defineing a ImageAttributes object and 
    1000   //seting (2) of its properties.
    1001   ImageAttributes imageAttributes = new ImageAttributes();
    1002 
    1003   //The first step in manipulating the watermark image is to replace 
    1004   //the background color with one that is trasparent (Alpha=0, R=0, G=0, B=0)
    1005   //to do this we will use a Colormap and use this to define a RemapTable
    1006   ColorMap colorMap = new ColorMap();
    1007 
    1008   //My watermark was defined with a background of 100% Green this will
    1009   //be the color we search for and replace with transparency
    1010   colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
    1011   colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); 
    1012 
    1013   ColorMap[] remapTable = {colorMap};
    1014 
    1015   imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
    1016 
    1017   //The second color manipulation is used to change the opacity of the 
    1018   //watermark.  This is done by applying a 5x5 matrix that contains the 
    1019   //coordinates for the RGBA space.  By setting the 3rd row and 3rd column 
    1020   //to 0.3f we achive a level of opacity
    1021   float[][] colorMatrixElements = { 
    1022            new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},       
    1023            new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},        
    1024            new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},        
    1025            new float[] {0.0f,  0.0f,  0.0f,  0.3f, 0.0f},        
    1026            new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}}; 
    1027   ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
    1028 
    1029   imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
    1030    ColorAdjustType.Bitmap);
    1031 
    1032   //For this example we will place the watermark in the upper right
    1033   //hand corner of the photograph. offset down 10 pixels and to the 
    1034   //left 10 pixles
    1035 
    1036   int xPosOfWm = ((phWidth - wmWidth)-10);
    1037   int yPosOfWm = 10;
    1038 
    1039   grWatermark.DrawImage(imgWatermark, 
    1040    new Rectangle(xPosOfWm,yPosOfWm,wmWidth,wmHeight),  //Set the detination Position
    1041    0,                  // x-coordinate of the portion of the source image to draw. 
    1042    0,                  // y-coordinate of the portion of the source image to draw. 
    1043    wmWidth,            // Watermark Width
    1044    wmHeight,      // Watermark Height
    1045    GraphicsUnit.Pixel, // Unit of measurment
    1046    imageAttributes);   //ImageAttributes Object
    1047 
    1048   //Replace the original photgraphs bitmap with the new Bitmap
    1049   imgPhoto = bmWatermark;
    1050   grPhoto.Dispose();
    1051   grWatermark.Dispose();
    1052 
    1053   //save new image to file system.
    1054   imgPhoto.Save(WorkingDirectory + ImageName +"_finally.jpg", ImageFormat.Jpeg);
    1055   imgPhoto.Dispose();
    1056   imgWatermark.Dispose();
    1057 
    1058         
    1059  }
    1060 }
    1061 
    1062 
    1063  //水印图片加水印文字
    1064 //   ReDrawImg img = new ReDrawImg();
    1065 //   img .PublicWorkingDirectory = @"C:\Watermark_src\WaterPic\";
    1066 //   img .PublicImageName = "watermark_photo.jpg";
    1067 //   img .PublicImageWater = "watermark.bmp";
    1068 //   img .PublicFontString = "清清月儿";
    1069 //   img .DealImage(); 
    1070   
    1071    //水印文字
    1072    ReDrawImg img = new ReDrawImg();
    1073    img .PublicWorkingDirectory = @"C:\Watermark_src\WaterPic\";
    1074    img .PublicImageName = "watermark_photo.jpg";   
    1075    img .PublicFontString = @"清清月儿";
    1076    img .DealImage();
    1077  
    1078 
    1079    //水印图片
    1080 //   ReDrawImg img = new ReDrawImg();
    1081 //   img .PublicWorkingDirectory = @"C:\Watermark_src\WaterPic\";
    1082 //   img .PublicImageName = "watermark_photo.jpg";
    1083 //   img .PublicImageWater = "watermark.bmp";   
    1084 //   img .DealImage(); 
    1085   
    1086  
    1087 后台代码:
    1088 
    1089 using System;
    1090 using System.Data;
    1091 using System.Configuration;
    1092 using System.Collections;
    1093 using System.Web;
    1094 using System.Web.Security;
    1095 using System.Web.UI;
    1096 using System.Web.UI.WebControls;
    1097 using System.Web.UI.WebControls.WebParts;
    1098 using System.Web.UI.HtmlControls;
    1099 public partial class _Default : System.Web.UI.Page
    1100 {
    1101 
    1102     protected void Page_Load(object sender, EventArgs e)
    1103     {
    1104 
    1105     }
    1106     protected void bt_upload_Click(object sender, EventArgs e)
    1107     {
    1108         try
    1109         {
    1110             if (FileUpload1.PostedFile.FileName == "")
    1111             {
    1112                 this.lb_info.Text = "请选择文件!";
    1113             }
    1114             else
    1115             {
    1116                 string filepath = FileUpload1.PostedFile.FileName;
    1117                 string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
    1118                 string serverpath1 = Server.MapPath("images/") + filename;
    1119                 //string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
    1120                 FileUpload1.PostedFile.SaveAs(serverpath1);
    1121                 //ImageThumbnail img = new ImageThumbnail(filepath);
    1122                 //img.ReducedImage(0.4, serverpath2);
    1123                 DrawImg img = new DrawImg();
    1124                 img.PublicWorkingDirectory = Server.MapPath("images/");
    1125                 img.PublicImageName = filename;
    1126                 img.PublicFontString = "http://blog.csdn.Net/21as.Net";
    1127                 img.PublicImageWater = "yyy.jpg";
    1128                 img.DealImage();
    1129                 this.lb_info.Text = "上传成功!";
    1130             }
    1131         }
    1132         catch (Exception error)
    1133         {
    1134             this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
    1135         }
    1136     }
    1137 }
    1138 
    1139  
    1140  
    1141  
    1142  
    1143  
    1144  

      嗯希望各位多多提意见,先在这里谢谢哈,也希望一切顺心!

  • 相关阅读:
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周
    第十一周课程总结
    第十周课程总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    课程总结
  • 原文地址:https://www.cnblogs.com/QLJ1314/p/2942703.html
Copyright © 2011-2022 走看看