黑马程序员--写c#略缩图代码后感

---------------------- 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="thumb_2011-11-304020.jpg" />

 

各大浏览器测试显示效果如下

    

 

最新总结:图片不能显示的原因是因为没有指定保存为图片格式。应该把    thumbImg.Save(thumbPath)  改成指定格式的保存 thumbImg.Save(thumbPath, System.Drawing.Imaging.ImageFormat.Jpeg);  但是我也得出了一个疑惑,为什么别的浏览器能正常显示,就是ie不能显示了。也许是微软对自己的浏览器比较严格吧,只有指定格式才能显示,呵呵,个人意见。

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值