2 wangyantao hb wangyantao_hb 于 2014.12.10 09:23 提问

asp.net 将大图压缩成小图片在首页上显示,为了加快显示速度

首页上显示图片,缩略图,图片在大图的基础上压缩成小图,然后在首页上显示

3个回答

showbo
showbo   Ds   Rxr 2014.12.10 10:04

用C#生成缩略图,同时保存大图。好多这种代码网上
http://blog.csdn.net/zxmcl/article/details/1722770
http://blog.csdn.net/jinbiao520/article/details/8973774

showbo
showbo 回复wangyantao_hb: 用System.IO空间下的(Directory.GetFiles获取所有文件然后遍历生成缩略图,建议你缩略图名称依据大图来定,这样就不需要更新数据库了。如打不为123456.jpg,小图就用123456_s.jpg,就是比大图多个_s,以后生成的缩略图也是这样,这样数据库保存大图,显示小图的时候replace下点为_s.就可以显示小图了
大约 3 年之前 回复
wangyantao_hb
wangyantao_hb 现在有很多图片已经上传了,我想着直接把图片变成缩略图显示,怎么弄
大约 3 年之前 回复
moonwrite
moonwrite   Rxr 2014.12.10 14:21

给你一个思路:url重写
///
/// ResponseImg 的摘要说明
///
public class ResponseImg : IHttpHandler
{
static readonly DateTime Refresh;
static readonly DateTime Now;
static ResponseImg()
{
Now = DateTime.Now;
Refresh = Now.AddMonths(1);
}

    public void ProcessRequest(HttpContext context)
    {

        if (!string.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]))
        {
            DateTime IfModifiedSince = DateTime.Parse(context.Request.Headers["If-Modified-Since"]);
            if (IfModifiedSince > Now)
            {
                context.Response.StatusCode = 304;
                return;
            }
        }

        //string folder = context.Request.QueryString["Folder"];
        string filepath = context.Request.QueryString["FilePath"];
        int width = int.Parse(context.Request.QueryString["Width"]);
        int height = int.Parse(context.Request.QueryString["Height"]);
        string hex = context.Request.QueryString["Hex"];

        string path = context.Server.MapPath(string.Format("/QshopImg/{0}", filepath));

        byte[] bytes = ImageHelper.Reset(path, width, height);//这个是我写的图片压缩方法 你自己重新上网找
        //System.Drawing.Image img = ImageHelper.Reset(bytes, width, height);

        context.Response.Headers["Last-Modified"] = Refresh.ToString();
        //context.Response.Cache.SetExpires(DateTime.Now.Add(Refresh));
        //context.Response.Cache.SetMaxAge(refresh);
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.CacheControl = HttpCacheability.Public.ToString();
        context.Response.Cache.SetValidUntilExpires(true);
        //context.Response.StatusCode = 304;
        //img.Save(context.Response.OutputStream, ImageHelper.GetImageFormat(path));
        context.Response.ContentType = "image/" + hex;

        context.Response.BinaryWrite(bytes);

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}



        <rewrite url="~/(p_img\d{3}/.+?)_(\d{1,3})x(\d{1,3})\.(jpg|jpeg|png|gif|bmp)$"
         to="~/ResponseImg.ashx?FilePath=$1&amp;Width=$2&amp;Height=$3&amp;Hex=$4"/>

                    比如原图片的是/xxx/yyy.png
                    /xxx/yyy_64x64.png 
                    那么就会请求到ResponseImg.ashx 同时把原来的图片压缩成64*64 再输出

                    你还可以把压缩后的图片缓存起来,避免再次压缩
testcs_dn
testcs_dn   Rxr 2015.01.05 09:47

System.Drawing.Bitmap bmp = new Bitmap(文件目录);
bmp.GetThumbnailImage(宽度,高度,);

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!