一个实现图片上传/产生缩略图/在上传图片上写字功能的完整页面代码(转)
这是页面代码
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
<%@ 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

以下是后台代码
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
12
namespace 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
}
217
}
218
using System;2
using System.Collections;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Web;7
using System.Web.SessionState;8
using System.Web.UI;9
using System.Web.UI.WebControls;10
using System.Web.UI.HtmlControls;11

12
namespace test13
{14
/// <summary>15
/// pic 的摘要说明。16
/// 功能:图片上传/保存至硬盘/生成缩略图/在图片上写字17
/// </summary>18
public class pic : System.Web.UI.Page19
{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
//此处这样写,是一个比较安全全的写法,因为接收到的参数值也许是NULL34
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
else50
{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
try72
{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
finally98
{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
#endregion216
}217
}218



浙公网安备 33010602011771号