注册
 找回密码
 注册
江西广告网
查看: 217|回复: 0
打印 上一主题 下一主题

用C#轻松地在DOTNET中实现缩略图

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-24 12:00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  <%@ Page language="c#" Codebehind="ToThumbnailImage.aspx.cs" Src="ToThumbnailImage.aspx.cs" AutoEventWireup="false" Inherits="Exam_C.ToThumbnailImage" %>   <html>    <head>     <title>Lion互动网络 =>生成缩略图</title>    </head>    <body>     <form id="Form1" method="post" runat="server">      </form>    </body>   </html>      ToThumbnailImage.aspx.cs      using System;   using System.Collections;   using System.ComponentModel;   using System.Data;   using System.Drawing;   using System.Web;   using System.Web.SessionState;   using System.Web.UI;   using System.Web.UI.WebControls;   using System.Web.UI.HtmlControls;   using System.Drawing.Imaging;   namespace Exam_C   {    /// <summary>    /// ToThumbnailImage 的摘要说明。    /// </summary>    public class ToThumbnailImage : System.Web.UI.Page    {    /*     Create By lion     2003-05-20 19:00     Copyright (C) 2004 www.LionSky.Net. All rights reserved.    Web: http://www.Lionsky.net ;    Email: lion-a@sohu.com    */        static Hashtable htmimes=new Hashtable();    internal readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";        #region Web 窗体设计器生成的代码    override protected void OnInit(EventArgs e)    {     #region htmimes[".jpe"]="image/jpeg";     htmimes[".jpeg"]="image/jpeg";     htmimes[".jpg"]="image/jpeg";      htmimes[".png"]="image/png";      htmimes[".tif"]="image/tiff";     htmimes[".tiff"]="image/tiff";     htmimes[".bmp"]="image/bmp";     #endregion     //调用生成缩略图方法     ToThumbnailImages("lionsky.jpg","b.gif",300);    }     #endregion       #region Helper       /// <summary>    /// 获取图像编码解码器的所有相关信息    /// </summary>    /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>    /// <returns>返回图像编码解码器的所有相关信息</returns>    static ImageCodecInfo GetCodecInfo(string mimeType)    {     ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();     foreach(ImageCodecInfo ici in CodecInfo)     {     if(ici.MimeType == mimeType)return ici;     }     return null;    }       /// <summary>    /// 检测扩展名的有效性    /// </summary>    /// <param name="sExt">文件名扩展名</param>    /// <returns>如果扩展名有效,返回true,否则返回false.</returns>    bool CheckValidExt(string sExt)    {      bool flag=false;     string[] aExt = AllowExt.Split('|');     foreach(string filetype in aExt)     {     if(filetype.ToLower()==sExt)     {      flag = true;      break;     }     }      return flag;    }       /// <summary>    /// 保存图片    /// </summary>    /// <param name="image">Image 对象</param>    /// <param name="savePath">保存路径</param>    /// <param name="ici">指定格式的编解码参数</param>    void SaveImage(System.Drawing.Image image,string savePath,ImageCodecInfo ici)    {     //设置 原图片 对象的 EncoderParameters 对象     EncoderParameters parameters = new EncoderParameters(1);     parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long) 90));     image.Save(savePath, ici, parameters);     parameters.Dispose();    }    #endregion       #region Methods       /// <summary>    /// 生成缩略图    /// </summary>    /// <param name="sourceImagePath">原图片路径(相对路径)</param>    /// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>    /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>    public void ToThumbnailImages(string sourceImagePath,string thumbnailImagePath,int thumbnailImageWidth)    {     string SourceImagePath = sourceImagePath;     string ThumbnailImagePath = thumbnailImagePath;     int ThumbnailImageWidth = thumbnailImageWidth;     string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();     if(SourceImagePath.ToString()==System.String.Empty) throw new NullReferenceException("SourceImagePath is null!");     if(!CheckValidExt(sExt))     {     throw new ArgumentException("原图片文件格式不正确,支持的格式有[ " AllowExt " ]","SourceImagePath");     }     //从 原图片 创建 Image 对象     System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(SourceImagePath));      int num = ((ThumbnailImageWidth / 4) * 3);     int width = image.Width;     int height = image.Height;     //计算图片的比例     if ((((double) width) / ((double) height)) >= 1.3333333333333333f)     {     num = ((height * ThumbnailImageWidth) / width);     }     else     {     ThumbnailImageWidth = ((width * num) / height);     }     if ((ThumbnailImageWidth < 1) || (num < 1))     {     return;     }     //用指定的大小和格式初始化 Bitmap 类的新实例     Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);     //从指定的 Image 对象创建新 Graphics 对象     Graphics graphics = Graphics.FromImage(bitmap);     //清除整个绘图面并以透明背景色填充     graphics.Clear(Color.Transparent);     //在指定位置并且按指定大小绘制 原图片 对象     graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));     image.Dispose();       try     {      //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件     string savepath = (ThumbnailImagePath==null?SourceImagePath:ThumbnailImagePath);      SaveImage(bitmap,HttpContext.Current.Server.MapPath(savepath),GetCodecInfo((string)htmimes[sExt]));     }     catch(System.Exception e)     {     throw e;     }     finally     {     bitmap.Dispose();        graphics.Dispose();     }    }    #endregion       }   } <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表