滚滚长江东流水,黄河入海不复返

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

hchxxzx--》一个实现图片上传/产生缩略图/在上传图片上写字功能的完整页面代码
这是页面代码

 1<%@ Page language="c#" Codebehind="pic.aspx.cs" AutoEventWireup="false" Inherits="test.pic" %>
 2<HTML>
 3    <HEAD>
 4        <title>pic</title>
 5        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
 6        <meta name="CODE_LANGUAGE" Content="C#">
 7        <meta name="vs_defaultClientScript" content="JavaScript">
 8        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 9    </HEAD>
10    <body>
11        <form id="Form1" method="post" runat="server">
12            <INPUT id="File1" type="file" name="File1" runat="server">
13            <asp:button id="Button1" runat="server" Text="Button"></asp:button><BR>
14            <table border="0" width="100%">
15                <tr>
16                    <td>
17                        <asp:Image id="Image1" runat="server" Width="200px"></asp:Image>
18                    </td>
19                    <td>
20                        <asp:Image id="Image2" runat="server" Width="200px"></asp:Image>
21                    </td>
22                    <td>
23                        <asp:Image id="Image3" runat="server" Width="100px"></asp:Image>
24                    </td>
25                </tr>
26            </table>
27        </form>
28    </body>
29</HTML>
30

以下是后台代码
  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Web;
  7using System.Web.SessionState;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
 10using System.Web.UI.HtmlControls;
 11
 12namespace test
 13{
 14    /// <summary>
 15    /// pic 的摘要说明。
 16    /// 功能:图片上传/保存至硬盘/生成缩略图/在图片上写字
 17    /// </summary>

 18    public class pic : System.Web.UI.Page
 19    {
 20        protected System.Web.UI.WebControls.Button Button1;
 21        protected System.Web.UI.WebControls.Image Image1;
 22        protected System.Web.UI.WebControls.Image Image2;
 23        protected System.Web.UI.WebControls.Image Image3;
 24        protected System.Web.UI.HtmlControls.HtmlInputFile File1;
 25    
 26        private void Page_Load(object sender, System.EventArgs e)
 27        {
 28            if(!this.IsPostBack)
 29            {
 30                //接收参数
 31                string filename = this.Request.QueryString["filename"];
 32                //如果参数不为空
 33                //此处这样写,是一个比较安全全的写法,因为接收到的参数值也许是NULL
 34                if(filename + "a" != "a")
 35                {
 36                    //求取后缀名
 37                    string suffix = filename.Substring(filename.LastIndexOf("."));
 38                    //显示图片
 39                    //分别为原图片/写字的图片(多一个w)/缩略图(多一个x)
 40                    this.Image1.ImageUrl = this.Server.MapPath("uploadfile/" + filename);
 41                    this.Image2.ImageUrl = this.Server.MapPath("uploadfile/" + filename.Replace(suffix,"w" + suffix));
 42                    this.Image3.ImageUrl = this.Server.MapPath("uploadfile/" + filename.Replace(suffix,"x" + suffix));
 43
 44                    //显示图像控件
 45                    this.Image1.Visible = true;
 46                    this.Image2.Visible = true;
 47                    this.Image3.Visible = true;
 48                }

 49                else
 50                {
 51                    //如果没有接收到参数,则隐藏页面中的图像控件
 52                    this.Image1.Visible = false;
 53                    this.Image2.Visible = false;
 54                    this.Image3.Visible = false;
 55                }

 56            }

 57        }

 58
 59
 60        /// <summary>
 61        /// 上传图片
 62        /// </summary>
 63        /// <param name="sender"></param>
 64        /// <param name="e"></param>

 65        private void Button1_Click(object sender, System.EventArgs e)
 66        {
 67            //接收上传图片 
 68            System.Web.HttpPostedFile myPost = this.Request.Files[0];
 69            if(myPost.ContentLength !=0)
 70            {
 71                try
 72                {
 73                    //定义上传路径(在当前目录下的uploadfile文件病例
 74                    string uploadpath = this.Server.MapPath("uploadfile");
 75                    //取得文件名
 76                    string tmpfilename = myPost.FileName;
 77                    //文件名
 78                    string filename = tmpfilename.Substring(tmpfilename.LastIndexOf("\\"+ 1);
 79
 80                    //原文件的保存路径
 81                    string fileSavePath = uploadpath + "\\" + filename;
 82
 83                    //保存原图片            
 84                    myPost.SaveAs(fileSavePath);
 85                
 86                    //调用生成缩略图程序,生成缩略图及生成写字的图片
 87                    this.toImage(myPost.InputStream,uploadpath,filename);
 88
 89                    //完成之后,重定向本页面,并带参数显示当前上传的图片 
 90                    this.Response.Redirect("pic.aspx?filename=" + filename);
 91                    this.Response.End();
 92                }

 93                catch(Exception ex)
 94                {
 95                    throw ex;
 96                }

 97                finally
 98                {
 99                    
100                }

101            }

102        }

103
104
105        /// <summary>
106        /// 生成缩略图程序
107        /// </summary>
108        /// <param name="myStream">取到的流文件对象</param>
109        /// <param name="uploadPath">要保存的路径</param>
110        /// <param name="picName">上传的图片原文件名</param>

111        private void toImage(System.IO.Stream myStream,string uploadPath,string picName)
112        {
113            //取得后缀名
114            string suffix = picName.Substring(picName.LastIndexOf("."));
115
116            //缩略图的保存路径
117            string fileXltPath = uploadPath + "\\" + picName.Replace(suffix,"x" + suffix);
118            //写字图的保存路径
119            string fileXztPath = uploadPath + "\\" + picName.Replace(suffix,"w" + suffix);
120
121
122            //创建一个图像对象取得上传图片对象
123            System.Drawing.Image myImage = System.Drawing.Image.FromStream(myStream,false);
124            //对绘制前的图片产生一个缩略图(原图片一半大小)
125            System.Drawing.Image thumbImage = myImage.GetThumbnailImage(myImage.Size.Width/2,myImage.Size.Height/2,null,System.IntPtr.Zero);
126            //保存缩略图
127            thumbImage.Save(fileXltPath,this.getImageFormat(suffix));
128            //关闭缩略图对象
129            thumbImage.Dispose();
130
131            //创建绘制对象
132            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(myImage);
133            g.DrawImage(myImage,0,0,myImage.Size.Width,myImage.Size.Height);
134            //选择字体及字体大小
135            System.Drawing.Font f = new Font("隶书",140);
136            //定义字体颜色
137            System.Drawing.Brush b = new SolidBrush(System.Drawing.Color.Red);
138            //开始绘制,根据上述两种设定,添加绘制的上左位置
139            g.DrawString("好好学习,天天向上",f,b,10,10);
140            //关闭绘制对象
141            g.Dispose();
142
143            //保存绘制后上传图片
144            myImage.Save(fileXztPath,myImage.RawFormat);
145            //关闭图片对象
146            myImage.Dispose();
147        }

148
149        /// <summary>
150        /// 根据图片的后缀名,返回要保存的图片格式
151        /// </summary>
152        /// <param name="suffix">带.号的后缀名</param>
153        /// <returns>返回System.Drawing.Imaging.ImageForma对象</returns>

154        private System.Drawing.Imaging.ImageFormat getImageFormat(string suffix)
155        {
156          System.Drawing.Imaging.ImageFormat myFormat;
157          switch(suffix.ToLower())
158          {
159            case ".bmp":
160              myFormat = System.Drawing.Imaging.ImageFormat.Bmp;
161              break;
162            case ".emf":
163              myFormat = System.Drawing.Imaging.ImageFormat.Emf;
164              break;
165            case ".exif":
166              myFormat = System.Drawing.Imaging.ImageFormat.Exif;
167              break;
168            case ".gif":
169              myFormat = System.Drawing.Imaging.ImageFormat.Gif;
170              break;
171            case ".icon":
172              myFormat = System.Drawing.Imaging.ImageFormat.Icon;
173              break;
174            case ".jpeg":
175            case ".jpg":
176              myFormat = System.Drawing.Imaging.ImageFormat.Jpeg;
177              break;
178            case ".png":
179              myFormat = System.Drawing.Imaging.ImageFormat.Png;
180              break;
181            case ".tiff":
182              myFormat = System.Drawing.Imaging.ImageFormat.Tiff;
183              break;
184            case ".wmf":
185              myFormat = System.Drawing.Imaging.ImageFormat.Wmf;
186              break;
187            default:
188              myFormat = System.Drawing.Imaging.ImageFormat.MemoryBmp;
189              break;
190          }

191          return(myFormat);
192        }

193
194
195        #region Web 窗体设计器生成的代码
196        override protected void OnInit(EventArgs e)
197        {
198            //
199            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
200            //
201            InitializeComponent();
202            base.OnInit(e);
203        }

204        
205        /// <summary>
206        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
207        /// 此方法的内容。
208        /// </summary>

209        private void InitializeComponent()
210        {    
211            this.Button1.Click += new System.EventHandler(this.Button1_Click);
212            this.Load += new System.EventHandler(this.Page_Load);
213
214        }

215        #endregion

216    }

posted on 2006-09-07 11:09  Steveson  阅读(563)  评论(0编辑  收藏  举报