asp.net中上传图片并生成小图片,自动添加水印的代码

分类: .Net(C#) 2010-03-22 15:28 242人阅读 评论(0) 收藏 举报

/// 上传图片生成缩略图及水印 (来自:http://www.51aspx.com/CV/ImageUpload)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 = "x_" + file.Name; // 缩略图文件名称
string fileName_sy = "text_" + file.Name; // 水印图文件名称(文字)
string fileName_syp = "water_" + file.Name; // 水印图文件名称(图片)
string webFilePath = Server.MapPath("ImgUpload/" + fileName); // 服务器端文件路径
string webFilePath_s = Server.MapPath("ImgUpload/" + fileName_s);  // 服务器端缩略图路径
string webFilePath_sy = Server.MapPath("ImgUpload/" + fileName_sy); // 服务器端带水印图路径(文字)
string webFilePath_syp = Server.MapPath("ImgUpload/" + fileName_syp); // 服务器端带水印图路径(图片)
string webFilePath_sypf = Server.MapPath("51aspx.png"); // 服务器端水印图路径(图片)

if (!File.Exists(webFilePath))
{
try
{
FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件
AddWater(webFilePath, webFilePath_sy);
AddWaterPic(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 = "提示:文件已经存在,请重命名后上传";
}
}
else
{
Label1.Text = "提示:文件类型不符";
}
}
}

修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天

* shuiliner2880
*
* 等级:

发表于:2008-05-23 09:03:486楼 得分:0
/**/
///
/// 生成缩略图
///
/// 源图路径(物理路径)
/// 缩略图路径(物理路径)
/// 缩略图宽度
/// 缩略图高度
/// 生成缩略图的方式
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();
}
}

/**/
///
/// 在图片上增加文字水印
///
/// 原服务器图片路径
/// 生成的带文字水印的图片路径
protected void AddWater(string Path, string Path_sy)
{
string addText = "51aspx.com";
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", 60);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Green);

g.DrawString(addText, f, b, 35, 35);
g.Dispose();

image.Save(Path_sy);
image.Dispose();
}

/**/
///
/// 在图片上生成图片水印
///
/// 原服务器图片路径
/// 生成的带图片水印的图片路径
/// 水印图片路径
protected void AddWaterPic(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();
}

protected void Button2_Click(object sender, EventArgs e)
{
//自动保存远程图片
WebClient client = new WebClient();
//备用Reg:
Regex reg = new Regex("IMG[^>]*?src//s*=//s*(?:/"(? [^/"]*)/" ¦'(? [^/']*)')", RegexOptions.IgnoreCase);
MatchCollection m = reg.Matches(TextBox1.Text);

foreach (Match math in m)
{
string imgUrl = math.Groups[1].Value;

//在原图片名称前加YYMMDD重名名并上传

Regex regName = new Regex(@"/w+.(?:jpg ¦gif ¦bmp ¦png)", RegexOptions.IgnoreCase);

string strNewImgName = DateTime.Now.ToShortDateString().Replace("-", "") + regName.Match(imgUrl).ToString();

try
{
//保存图片
client.DownloadFile(imgUrl, Server.MapPath("ImgUpload/Auto/" + strNewImgName));

}
catch
{
}
finally
{

}

client.Dispose();
}

Response.Write(" alert('远程图片保存成功,保存路径为ImgUpload/auto') ");

}
}

asp.net中上传图片并生成小图片,自动添加水印的代码 .相关推荐

  1. 在ASP.NET中上传图片并生成缩略图

    在ASP.NET中上传图片并生成缩略图,可以参照下列代码: private void btnUploadPicture_Click(object sender, System.EventArgs e) ...

  2. java生成小图片_JAVA生成缩略小图片类

    JAVA生成缩略小图片类 java.awt.image.BufferedImage是缓冲图片类主要将生成的图片对象缓冲起来:javax.imageio.ImageIO是图片IO控制类,可以将缓冲图片对 ...

  3. jQuery图片自动添加水印插件

    JS脚本(jQuery)为图片加水印效果预览: http://hovertree.com/texiao/jquery/94/ 本功能使用HTML5实现,可为图片加上文字水印,可设置文字,设置颜色,位置 ...

  4. java web 生成验证码_Javaweb开发中通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.res ...

  5. java与python两个小人动图_CSS Sprite小图片自动合并工具(NodeJS,Python,Java,Ruby)

    注* 基于Node.JS的图片合并工具还有一些,但大多依赖第三方图像处理库,此处略. /*配置输出的大图片地址.排列方向,间隔等*/ /** sprite: mysprite; sprite-imag ...

  6. 利用Asp.net中的AJAX制作网页上自动选取开始日期及结束日期的用户自定义控件...

    前段时间用过一个酒店入住预约网站,当你点击"入住时间"时会悬浮出一对并列的日历,然后点击左边的日历就能选择入住时间,点击右侧的日历就能自动得到离店时间,当时没有太留意是怎么实现的, ...

  7. ASP.NET 中验证的自定义返回和统一社会信用代码的内置验证实现

    目录 项目演示 创建项目 创建用户注册信息接收类 创建测试 Controller 执行测试 统一错误返回 自定义验证规则 验证规则介绍 编码实现 最后 References 本文介绍 ASP.NET ...

  8. 小程序中 使用canvas 生成推广图片——wepy框架

    现在小程序不能直接分享到朋友圈,所以另辟蹊径的有了生成 '推广图' 让用户分享到朋友圈的方式就出来了.使用canvas 进行绘图的时候 主要用了 ctx.drawImage() API进行绘画,但是c ...

  9. 在Asp.Net中从sqlserver检索(retrieve)图片

    介绍: 这篇文章是我写的"如何把图片存入sqlServer中"的后续.我建议你在读这篇文章之前先看看那篇. 和存储图片相比,读取图片就要简单多了.输出一副图片我们要做的就是使用Re ...

最新文章

  1. L - Oil Deposits HDU - 1241
  2. 关于 Ruby Ruby on Rails 的一些书及论坛网站
  3. 本地数据源:使用firebird数据库
  4. 决策树:特征分布空间划分方法
  5. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
  6. java帐篷_Java多线程之 Park和Unpark(十四)
  7. snmp,mrtg安装和配置(2) mrtg安装
  8. 【Pygame实战】怀旧经典—这款给娃的棋类游戏,你还记得叫什么吧?(一定要收藏)
  9. npm 清理缓存命令 【最新的】
  10. 本机号码校验不只是免输密码、免输短信验证码
  11. 求定积分的不太常见的方法
  12. 干货:教你如何玩转信息流广告投放,整套信息流精准定向投放攻略!
  13. 一名IT界“老”技术人关于学习与成长的分享,受益!
  14. C++对象模型-在对象模型的尖端 第七章笔记
  15. KaTex的一个简单例子
  16. python基础教程:易忽视知识点小结
  17. P1015 [NOIP1999 普及组] 回文数 C语言实现
  18. Easyx-----c语言实现斗兽棋
  19. GPFS 之 Quorum 深入解析
  20. 图片隐写神器Stegsolve安装教程

热门文章

  1. Linux查看端口使用状态及启动
  2. AS5 安装 JAVA 1.6.0 用于 TOTOplayer的启动
  3. 结婚戒指为什么戴在无名指上的原因
  4. poj 3459(背包问题)
  5. java IO(输入输出) 对象的序列化和反序列化
  6. NYOJ 600 花儿朵朵
  7. CLR Essential Types
  8. browse下载插件DownThemAll!
  9. cas sso单点登录 登录过程和登出过程原理说明
  10. DDoS攻防战(三):ip黑白名单防火墙frdev的原理与实现