今天我写了个略缩图的简单方法,发现很多不为人知的事,当时真的让我很惊讶,很让我接受不了。
略缩图代码如下:
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="thumb_2011-11-304020.jpg" />
各大浏览器测试显示效果如下:
最新总结:图片不能显示的原因是因为没有指定保存为图片格式。应该把 thumbImg.Save(thumbPath) 改成指定格式的保存 thumbImg.Save(thumbPath, System.Drawing.Imaging.ImageFormat.Jpeg); 但是我也得出了一个疑惑,为什么别的浏览器能正常显示,就是ie不能显示了。也许是微软对自己的浏览器比较严格吧,只有指定格式才能显示,呵呵,个人意见。
---------------------- Windows Phone 7手机开发、 .Net培训、期待与您交流! ----------------------