博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图...
阅读量:5828 次
发布时间:2019-06-18

本文共 6339 字,大约阅读时间需要 21 分钟。

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
UpFile.aspx.cs
"
Inherits
=
"
UpFile
"
%>
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>
<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>
<
head runat
=
"
server
"
>
<
title
>
无标题页
</
title
>
</
head
>
<
body
>
<
form id
=
"
form1
"
runat
=
"
server
"
>
<
br
/>
<
asp:FileUpload ID
=
"
FileUpload1
"
runat
=
"
server
"
/>
<
br
/>
<
asp:Button ID
=
"
Button1
"
runat
=
"
server
"
Text
=
"
上传
"
OnClick
=
"
Button1_Click
"
/>
<
asp:Label ID
=
"
Label1
"
runat
=
"
server
"
></
asp:Label
>
<
div
>
</
div
>
</
form
>
</
body
>
</
html
>

 

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.IO;
public
partial
class
UpFile : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
Button1_Click(
object
sender, EventArgs e)
{
if
(FileUpload1.HasFile)
{
string
fileContentType
=
FileUpload1.PostedFile.ContentType;
if
(fileContentType
==
"
image/bmp
"
||
fileContentType
==
"
image/gif
"
||
fileContentType
==
"
image/pjpeg
"
)
{
string
name
=
FileUpload1.PostedFile.FileName;
//
客户端文件路径
FileInfo file
=
new
FileInfo(name);
string
fileName
=
file.Name;
//
文件名称
string
fileName_s
=
"
s_
"
+
file.Name;
//
缩略图文件名称
string
fileName_sy
=
"
sy_
"
+
file.Name;
//
水印图文件名称(文字)
string
fileName_syp
=
"
syp_
"
+
file.Name;
//
水印图文件名称(图片)
string
webFilePath
=
Server.MapPath(
"
file/
"
+
fileName);
//
服务器端文件路径
string
webFilePath_s
=
Server.MapPath(
"
file/
"
+
fileName_s);
//
服务器端缩略图路径
string
webFilePath_sy
=
Server.MapPath(
"
file/
"
+
fileName_sy);
//
服务器端带水印图路径(文字)
string
webFilePath_syp
=
Server.MapPath(
"
file/
"
+
fileName_syp);
//
服务器端带水印图路径(图片)
string
webFilePath_sypf
=
Server.MapPath(
"
file/shuiyin.jpg
"
);
//
服务器端带水印图路径(图片)
if
(
!
File.Exists(webFilePath))
{
if
(FileUpload1.PostedFile.ContentLength
<
2
*
1024
*
1024
)
//
如果图片小于2M
{
try
{
FileUpload1.SaveAs(webFilePath);
//
使用saveAS方法保存文件
//
AddShuiYinWord(webFilePath, webFilePath_sy);
//
保存水印文字图片
//
AddShuiYinPic(webFilePath, webFilePath_syp, webFilePath_sypf);
//
保存添加水印图片之后的图片
MakeThumbnail(webFilePath, webFilePath_s,
130
,
130
,
"
Cut
"
);
//
生成缩略图的方法
Label1.Text
=
"
提示:文件“
"
+
fileName
+
"
”成功上传,并生成“
"
+
fileName_s
+
"
”缩略图,文件类型为:
"
+
FileUpload1.PostedFile.ContentType
+
"
,文件大小为:
"
+
FileUpload1.PostedFile.ContentLength
+
"
B
"
;
}
catch
(Exception ex)
{
Label1.Text
=
"
提示:文件上传失败,失败原因:
"
+
ex.Message;
}
}
else
{
Label1.Text
=
"
提示:文件不能大于2M
"
;
}
}
else
{
Label1.Text
=
"
提示:文件已经存在,请重命名后上传
"
;
}
}
else
{
Label1.Text
=
"
提示:文件类型不符
"
;
}
}
}
///
<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)
{
System.Drawing.Image originalImage
=
System.Drawing.Image.FromFile(originalImagePath);
int
towidth
=
width;
int
toheight
=
height;
int
x
=
0
;
int
y
=
0
;
int
ow
=
originalImage.Width;
int
oh
=
originalImage.Height;
switch
(mode)
{
case
"
HW
"
:
//
指定高宽缩放(可能变形)
break
;
case
"
W
"
:
//
指定宽,高按比例
toheight
=
originalImage.Height
*
width
/
originalImage.Width;
break
;
case
"
H
"
:
//
指定高,宽按比例
towidth
=
originalImage.Width
*
height
/
originalImage.Height;
break
;
case
"
Cut
"
:
//
指定高宽裁减(不变形)
if
((
double
)originalImage.Width
/
(
double
)originalImage.Height
>
(
double
)towidth
/
(
double
)toheight)
{
oh
=
originalImage.Height;
ow
=
originalImage.Height
*
towidth
/
toheight;
y
=
0
;
x
=
(originalImage.Width
-
ow)
/
2
;
}
else
{
ow
=
originalImage.Width;
oh
=
originalImage.Width
*
height
/
towidth;
x
=
0
;
y
=
(originalImage.Height
-
oh)
/
2
;
}
break
;
default
:
break
;
}
//
新建一个bmp图片
System.Drawing.Image bitmap
=
new
System.Drawing.Bitmap(towidth, toheight);
//
新建一个画板
System.Drawing.Graphics g
=
System.Drawing.Graphics.FromImage(bitmap);
//
设置高质量插值法
g.InterpolationMode
=
System.Drawing.Drawing2D.InterpolationMode.High;
//
设置高质量,低速度呈现平滑程度
g.SmoothingMode
=
System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//
清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent);
//
在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage,
new
System.Drawing.Rectangle(
0
,
0
, towidth, toheight),
new
System.Drawing.Rectangle(x, y, ow, oh),
System.Drawing.GraphicsUnit.Pixel);
try
{
//
以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch
(System.Exception e)
{
throw
e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
///
<summary>
///
在图片上增加文字水印
///
</summary>
///
<param name="Path">
原服务器图片路径
</param>
///
<param name="Path_sy">
生成的带文字水印的图片路径
</param>
protected
void
AddShuiYinWord(
string
Path,
string
Path_sy)
{
string
addText
=
"
http://www.cnblogs.com/qixuejia
"
;
System.Drawing.Image image
=
System.Drawing.Image.FromFile(Path);
System.Drawing.Graphics g
=
System.Drawing.Graphics.FromImage(image);
g.DrawImage(image,
0
,
0
, image.Width, image.Height);
System.Drawing.Font f
=
new
System.Drawing.Font(
"
Verdana
"
,
16
);
System.Drawing.Brush b
=
new
System.Drawing.SolidBrush(System.Drawing.Color.Blue);
g.DrawString(addText, f, b,
15
,
15
);
g.Dispose();
image.Save(Path_sy);
image.Dispose();
}
///
<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)
{
System.Drawing.Image image
=
System.Drawing.Image.FromFile(Path);
System.Drawing.Image copyImage
=
System.Drawing.Image.FromFile(Path_sypf);
System.Drawing.Graphics g
=
System.Drawing.Graphics.FromImage(image);
g.DrawImage(copyImage,
new
System.Drawing.Rectangle(image.Width
-
copyImage.Width, image.Height
-
copyImage.Height, copyImage.Width, copyImage.Height),
0
,
0
, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
image.Save(Path_syp);
image.Dispose();
}
}

 

你可能感兴趣的文章
UILabel 的属性(用法)方法
查看>>
第二次博客作业
查看>>
【BZOJ1703】奶牛排名
查看>>
sql Escape用法
查看>>
日期format
查看>>
Linux crontab定时执行任务
查看>>
JUnit编写单元测试代码注意点小结
查看>>
UVA 146 ID Codes
查看>>
Quartus使用Verilog设计计数器步骤全解
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
我为Net狂 ~ 社交平台系列小集合!
查看>>
Windows API一日一练(66)CreateWaitableTimer和SetWaitableTimer函数
查看>>
中秋节
查看>>
选择排序
查看>>
wpf datagrid 遍历行
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
Go语言的for循环
查看>>
前端基础之JavaScript
查看>>
ThreadLocal
查看>>