网站中的缩略图是如何生成的?(C#处理图像)

 网站中的缩略图是如何生成的?(C#处理图像)

controller层代码:

/// <summary> 
        /// 生成缩略图 
        /// </summary> 
        /// <returns></returns> 
        public ActionResult ThumImg() 
        {

            Response.Clear(); 
            //string originalFileName = Server.MapPath(Request.QueryString["fn"]); //服务器上的目录名 
            string originalFileName = Request.QueryString["fn"];//本地目录名 
            int thumbnailWidth = Convert.ToInt16(Request.QueryString["tw"]); 
            int thumbnailHeight = Convert.ToInt16(Request.QueryString["th"]); 
            string bgColorString = Convert.ToString(Request.QueryString["bg"]); 
            new ThumImage(originalFileName, thumbnailWidth, thumbnailHeight, bgColorString).ThumImg(); 
            return View(); 
        }

    }

VIEW层代码:

   <%int j=0; 
        foreach (var i in ViewData["ImgList"] as List<string>) 
      { 
          j++; 
          if (j > 20) break; 
             %> 
    <img src='/product/ThumImg?fn=<%=i %>&tw=50&th=50&bg=000000' border="0"> 
    <%} %>

Coder层代码:

 public class ThumImage 
    { 
        string originalFileName; 
        int thumbnailWidth; 
        int thumbnailHeight; 
        string bgColorString; 
        public ThumImage(string _originalFileName, int _thumbnailWidth, int _thumbnailHeight, string _bgColorString) 
        { 
            this.originalFileName = _originalFileName; 
            this.thumbnailWidth = _thumbnailWidth; 
            this.thumbnailHeight = _thumbnailHeight; 
            this.bgColorString = _bgColorString; 
        } 
        /// <summary> 
        /// 生成缩略图 
        /// </summary> 
        /// <returns></returns> 
        public void ThumImg() 
        {

            HttpContext.Current.Response.Clear(); 
            #region 建立图像主体对象 
            ColorConverter cv = new ColorConverter(); 
            Color bgColor = (Color)cv.ConvertFromString("#" + bgColorString);//通过string,生成一个color对象,ColorConverter是颜色转换方法 
            System.Drawing.Image img = System.Drawing.Image.FromFile(originalFileName);//通过url得到image对象 
            System.Drawing.Imaging.ImageFormat thisFormat = img.RawFormat;//指定文件的文件格式,它是ImageFormat类型,不可承继 
            System.Drawing.Size newSize = this.GetNewSize(thumbnailWidth, thumbnailHeight, img.Width, img.Height);//图像尺寸,GetNewSize实现等比例缩放 
            System.Drawing.Bitmap outBmp = new Bitmap(thumbnailWidth, thumbnailHeight);//建立一个封闭GDI+ 位图对象 
            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(outBmp);//建立一个GDI+ 位图画面,从指定的Image对象中 
            #endregion

            #region 设置画布的描绘质量 
            g.CompositingQuality = CompositingQuality.Default; 
            g.SmoothingMode = SmoothingMode.Default; 
            g.InterpolationMode = InterpolationMode.Default; 
            g.Clear(bgColor); 
            Rectangle r = new Rectangle((thumbnailWidth - newSize.Width) / 2, 
                                           (thumbnailHeight - newSize.Height) / 2, 
                                           newSize.Width, newSize.Height); 
            g.DrawImage(img, r, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel); 
            g.Dispose(); 
            #endregion

            #region 设置服务器响应文件头类型 
            if (thisFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif)) 
            { 
                HttpContext.Current.Response.ContentType = "image/gif";//网页内容类型为图像的MIME 
            } 
            else 
            { 
                HttpContext.Current.Response.ContentType = "image/jpeg"; 
            } 
            #endregion

 

            //设置压缩质量 
            System.Drawing.Imaging.EncoderParameters encoderParams = new EncoderParameters(); 
            System.Drawing.Imaging.EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, new long[] { 100 }); 
            encoderParams.Param[0] = encoderParam;

            //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。 
            System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); 
            System.Drawing.Imaging.ImageCodecInfo jpegICI = null;

            for (int fwd = 0; fwd < arrayICI.Length; fwd++) 
            { 
                if (arrayICI[fwd].FormatDescription.Equals("JPEG")) 
                { 
                    jpegICI = arrayICI[fwd]; 
                    break; 
                } 
            }

            if (jpegICI == null) 
            { 
                outBmp.Save(HttpContext.Current.Response.OutputStream, jpegICI, encoderParams); 
            } 
            else 
            { 
                outBmp.Save(HttpContext.Current.Response.OutputStream, thisFormat); //保存的页面的输出流中 
            } 
        }

        /// <summary> 
        /// 图像根据相应尺寸实现等比例缩放 
        /// </summary> 
        /// <param name="maxWidth"></param> 
        /// <param name="maxHeight"></param> 
        /// <param name="width"></param> 
        /// <param name="height"></param> 
        /// <returns></returns> 
        System.Drawing.Size GetNewSize(int maxWidth, int maxHeight, int width, int height) 
        { 
            Double w = 0.0; 
            Double h = 0.0; 
            Double sw = Convert.ToDouble(width); 
            Double sh = Convert.ToDouble(height); 
            Double mw = Convert.ToDouble(maxWidth); 
            Double mh = Convert.ToDouble(maxHeight);

            if (sw < mw && sh < mh) 
            { 
                w = sw; 
                h = sh; 
            } 
            else if ((sw / sh) > (mw / mh)) 
            { 
                w = maxWidth; 
                h = (w * sh) / sw; 
            } 
            else 
            { 
                h = maxHeight; 
                w = (h * sw) / sh; 
            } 
            return new System.Drawing.Size(Convert.ToInt32(w), Convert.ToInt32(h)); 
        }

    }

本文转自博客园张占岭(仓储大叔)的博客,原文链接:网站中的缩略图是如何生成的?(C#处理图像),如需转载请自行联系原博主。

时间: 2024-10-26 11:53:56

网站中的缩略图是如何生成的?(C#处理图像)的相关文章

求一js代码 用于在Gridview中显示缩略图 图片较大 要缩小真实大小生成新的小图片

问题描述 求一js代码用于在Gridview中显示缩略图图片较大要缩小真实大小生成新的小图片 解决方案 解决方案二:js????js除了能显示服务器上的图片?还能修改服务器上的图片了??小图片都是在大图片上传上去后就生成的,如何生成小图去看System.Drawing.Image解决方案三:引用1楼starfd的回复: js????js除了能显示服务器上的图片?还能修改服务器上的图片了??小图片都是在大图片上传上去后就生成的,如何生成小图去看System.Drawing.Image up解决方案

百度排名网站中的一朵奇葩

最近百度一反常态也不怎么大更新了,只是小范围的波动,但是今天我发现一个网站真的很是奇怪,应该算得上是百度排名网站中的一朵奇葩了,我在百度中搜索关键词上海SEO,在第二页发现了这个网站,如下图(红色框中):   从上图中大家一看就知道这个网站排名是百度11名,但是排名在这个位置的网站综合素质应该是很不错的网站了,但是点击打开网站一看,这样的网站能排在11名,我很是不理解,如图:   上图就是这个网站打开后的页面,别的什么也没有了.但是从6.22和6.28事件后,百度公告声明了:"为了提升百度用户的

看实例学VFP:向数据表中添加记录时自动生成编号

本例在"看实例学VFP:向数据表中添加记录并验证输入数据是否合法"的基础上进行了改进,实现了在添加记录时不仅能够完成对输入数据的校验,还具有自动生成编号的功能.自动生成编号的相关代码加在表单的init事件及"添加"按钮的click中,在表单第一次启动或添加完记录后都会调用此段代码,实现自动生成编号的功能.运行界面如下: 本例用到了"数据1"数据库中的"网站信息表",关于该数据库的情况已经在看实例学VFP:示例数据库一文中给出,

asp.net-ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的

问题描述 ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的 ASP.NET开发web网站中,如何动态控制表格的行其中有4列是跨行的,跨的行数和表格的行数一致,还有4列是不跨行也不夸列的. 我的想法是用DataList来做,但是试了多次不行,请高手们帮忙看看 解决方案 用程序动态生成行和列

如何在搭建的asp.net网站中添加图片

问题描述 如何在搭建的asp.net网站中添加图片 在VS2013自动生成的asp.net网站模板中,如何插入图片? 解决方案 你确认你是开发者,而不是一个office操作员?如果你完全不懂html,我想wysiwyg的编辑器才是适合你的. 解决方案二: 不好意思,之前没接触过web,这两天刚申请了azure1元免费使用,好奇,想稍微了解下的.还望不吝赐教.html的基本语法我还是看过一点的.

浅谈小型淘宝客网站中淘宝API的应用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 近1年来,随着淘宝客网站的兴起,淘宝API网站程序也非常红火,有免费的,有收费的;有纯公益性的,有带后门的.总之,现在任何一个哪怕是超新手站长要做淘宝客网站,都会选择一个淘宝API程序作为网站的基础.今天我想谈一下中小淘宝客网站中淘宝API程序的应用的一个小问题. 淘宝API程序生成的网页还是比较容易被搜索引擎收录的,这是它的优点之一.我这里

网站中不应该出现的几种SEO优化手法

中介交易 SEO诊断 淘宝客 云主机 技术大厅 SEO优化不当,会导致网站遭搜索引擎降权.K站,严重影响客户的利益,所以必须使用正规手法来做优化. 用过多的Flash.由于搜索引擎技术原因,蜘蛛无法检索到Flash中的内容,因此,在网站中使用过多的Flash会适得其反.而且网站使用过多的Flash,会增加网站维护成本,相反,图片比Flash好的多. 没有使用带关键字的链接.对于优化来说,使用带关键字的内部链接和外部链接很重要,比如在其他网站上发布信息,关键字中加入自己网站的超链接.获得了越来越多

快速发现并改正网站中的无效链接_Dreamweaver

在我们浏览网站的时候,一定都遇到过页面上带红叉的无效图片或者"无法找到网页"的提示,出现如此现象一般都是因为链接文件的位置发生变化.被误删除或者文件名的拼写错误造成的. 为了避免出现无效链接的尴尬,树立良好的网站形象,当我们完成一个网站的设计制作后,一定要认真地检查是否存在失效链接,以便及时修改. 将无效链接扼杀在上传前 为了预防网站上传后出现无效链接,在上传前我们可以使用FrontPage2003的超链接报表功能来检查整个网站的链接情况,如果遇到无效链接还可以及时编辑修复.首先我们要

如何在企业网站中添加百度地图名片

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在制作企业网站的时候,通常在"联系我们"这一页面会插入企业位置的地图,有些美工功底深厚的站长可能会自行制作一张JPG的图片放上去,也有些站长会在百度地图.搜搜地图或者谷歌地图等地图平台上截取一张图片,然后添上公司名称的标记,然后将其放在页面的相应位置.通过这些方式制作出来的地图,只起到一个初步的指示作用,对于一个对地理位置