您的位置:首页 > 职场人生

黑马程序员--写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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: