黑马程序员--写c#略缩图代码后感
2011-12-02 13:48
309 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
今天我写了个略缩图的简单方法,发现很多不为人知的事,当时真的让我很惊讶,很让我接受不了。
略缩图代码如下:
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
/// <summary>
/// 接收文件上传 目标页面
/// </summary>
public class Upload : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
//获得浏览器端 传过来 第一个文件选择框的数据
HttpPostedFile hpFile = context.Request.Files[0];
//要保存的目录路径
string filePath = "upload/";
if (hpFile.ContentLength > 0)
{
if (hpFile.ContentType.IndexOf("image") > -1)
{
//获得上传上来的文件名称
//string fileName = System.IO.Path.GetFileName(hpFile.FileName);
string fileExtention = System.IO.Path.GetExtension(hpFile.FileName);
//随机生成一个文件名
string fileName = DateTime.Now.ToString("yyyy-MM-d") + (new Random().Next(9999).ToString());
//拼接成完成的文件名
fileName = fileName + fileExtention;
//获得保存文件的物理路径
filePath = context.Server.MapPath(filePath+ fileName);
//将上传来的 文件数据 保存到 相应的 物理路径上
hpFile.SaveAs(filePath);
//将上传上来的文件对象里的 数据流 转成 图片对象
using (Image img = Image.FromStream(hpFile.InputStream))
{
//创建缩略图对象
using (Bitmap thumbImg = new Bitmap(383, 215))
{
//创建 【画家】对象,并告诉他要在缩略图上作画
using (Graphics g = Graphics.FromImage(thumbImg))
{
//0,0,要将大图画成多大,要取大图的哪个部分,单位
g.DrawImage(img, new Rectangle(0, 0, thumbImg.Width, thumbImg.Height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
string thumbPath = context.Server.MapPath("ThumbPath/thumb_" + fileName);
thumbImg.Save(thumbPath);
//context.Response.Write("<script type='text/javascript'>window.location='text.aspx?ID='ThumbPath/thumb_"+fileName+"'</script>");
// context.Response.WriteFile("<script type='text/javascript'>window.location='text.aspx?ID='ThumbPath/thumb_" + fileName + "'</script>");
}
}
}
context.Response.Write("恭喜您上传成功!!!");
}
else
{
context.Response.Write("您上传的不是图片文件!!");
}
}
}
public bool IsReusable {
get {
return false;
}
}
}
通过以上的做法,我们可生成一个略缩图,但是当我准备在实际中要用到这些略缩图时,我却发现根本不管用。这些生成的略缩图,只能在非ie的的浏览器中能显示,我用ietester测试了,但是结果都不能显示,这也是我开始为什么会惊讶和不能接受的事实。很多的未解都让我对知识很好奇,我喜欢这种感觉。
thumb_2011-11-304020.jpg 就是上面生成略缩图项目中拷贝出来进行测试的。
thumbImg.html 里面就放了个 <img src="[b]thumb_2011-11-304020.jpg" />[/b]
各大浏览器测试显示效果如下:
最新总结:图片不能显示的原因是因为没有指定保存为图片格式。应该把 thumbImg.Save(thumbPath) 改成指定格式的保存 thumbImg.Save(thumbPath, System.Drawing.Imaging.ImageFormat.Jpeg); 但是我也得出了一个疑惑,为什么别的浏览器能正常显示,就是ie不能显示了。也许是微软对自己的浏览器比较严格吧,只有指定格式才能显示,呵呵,个人意见。
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
今天我写了个略缩图的简单方法,发现很多不为人知的事,当时真的让我很惊讶,很让我接受不了。
略缩图代码如下:
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
/// <summary>
/// 接收文件上传 目标页面
/// </summary>
public class Upload : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
//获得浏览器端 传过来 第一个文件选择框的数据
HttpPostedFile hpFile = context.Request.Files[0];
//要保存的目录路径
string filePath = "upload/";
if (hpFile.ContentLength > 0)
{
if (hpFile.ContentType.IndexOf("image") > -1)
{
//获得上传上来的文件名称
//string fileName = System.IO.Path.GetFileName(hpFile.FileName);
string fileExtention = System.IO.Path.GetExtension(hpFile.FileName);
//随机生成一个文件名
string fileName = DateTime.Now.ToString("yyyy-MM-d") + (new Random().Next(9999).ToString());
//拼接成完成的文件名
fileName = fileName + fileExtention;
//获得保存文件的物理路径
filePath = context.Server.MapPath(filePath+ fileName);
//将上传来的 文件数据 保存到 相应的 物理路径上
hpFile.SaveAs(filePath);
//将上传上来的文件对象里的 数据流 转成 图片对象
using (Image img = Image.FromStream(hpFile.InputStream))
{
//创建缩略图对象
using (Bitmap thumbImg = new Bitmap(383, 215))
{
//创建 【画家】对象,并告诉他要在缩略图上作画
using (Graphics g = Graphics.FromImage(thumbImg))
{
//0,0,要将大图画成多大,要取大图的哪个部分,单位
g.DrawImage(img, new Rectangle(0, 0, thumbImg.Width, thumbImg.Height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
string thumbPath = context.Server.MapPath("ThumbPath/thumb_" + fileName);
thumbImg.Save(thumbPath);
//context.Response.Write("<script type='text/javascript'>window.location='text.aspx?ID='ThumbPath/thumb_"+fileName+"'</script>");
// context.Response.WriteFile("<script type='text/javascript'>window.location='text.aspx?ID='ThumbPath/thumb_" + fileName + "'</script>");
}
}
}
context.Response.Write("恭喜您上传成功!!!");
}
else
{
context.Response.Write("您上传的不是图片文件!!");
}
}
}
public bool IsReusable {
get {
return false;
}
}
}
通过以上的做法,我们可生成一个略缩图,但是当我准备在实际中要用到这些略缩图时,我却发现根本不管用。这些生成的略缩图,只能在非ie的的浏览器中能显示,我用ietester测试了,但是结果都不能显示,这也是我开始为什么会惊讶和不能接受的事实。很多的未解都让我对知识很好奇,我喜欢这种感觉。
thumb_2011-11-304020.jpg 就是上面生成略缩图项目中拷贝出来进行测试的。
thumbImg.html 里面就放了个 <img src="[b]thumb_2011-11-304020.jpg" />[/b]
各大浏览器测试显示效果如下:
最新总结:图片不能显示的原因是因为没有指定保存为图片格式。应该把 thumbImg.Save(thumbPath) 改成指定格式的保存 thumbImg.Save(thumbPath, System.Drawing.Imaging.ImageFormat.Jpeg); 但是我也得出了一个疑惑,为什么别的浏览器能正常显示,就是ie不能显示了。也许是微软对自己的浏览器比较严格吧,只有指定格式才能显示,呵呵,个人意见。
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员_C#代码快速注释。
- 黑马程序员_C#学习之数组(代码)
- 黑马程序员_C#代码的调试问题
- 黑马程序员之C#学习笔记: Lambda表达式学习总结
- 勇敢者论坛完整源代码(asp.net c# SQL 2000)发布--asp.net开源论坛代码
- C#三行代码获取优酷首页热门视频集合
- C#验证邮件的正则表达式的代码
- C#语言编写代码逻辑
- C#调用存储过程返回值 (登录代码)
- [黑马程序员]C# 与 java 命名规则总结
- C#上机作业及代码Question2
- WP7中,在后台c#代码中控制Grid
- c# 代码重新排版 变整齐
- C# 代码结构-大小写的区别
- 艾伟_转载:二十行C#代码打造Ruby Markup Builder
- c#获取外网IP代码片段
- 黑马程序员--C#控制台应用程序之骑士飞行棋
- 线性表代码示例——C#
- 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释
- Jmouse.JFiles 代码(C#)