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

缩略图

 以前,在页面上实现缩略图必须借助第三方组件。现在,有了.NET,就可以很轻松地实现缩略图。下面就是实现缩略图的例子。
ToThumbnailImage.aspx

<%@ 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

 }
}

时间: 2024-09-17 04:31:36

用C#轻松在DOTNET中实现缩略图的相关文章

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

缩略图 以前,在页面上实现缩略图必须借助第三方组件.现在,有了.NET,就可以很轻松地实现缩略图.下面就是实现缩略图的例子. 关键字:C# ,ASP.NET,缩略图 实例下载:http://www.lionsky.net/MyWebSite/DownSoft/list.aspx?id=221 ToThumbnailImage.aspx <%@ Page language="c#" Codebehind="ToThumbnailImage.aspx.cs" Sr

两招轻松输入字库中没有的文字

两招轻松输入字库中没有的文字    在我们进行文字录入的过程中,经常会碰到一些怪字,不管使用什么输入法都无法输入,在正规的字库中根本找不到它们.碰到这些字我们应该怎么样才能将其录入呢?在这里我们向大家介绍两种比较常见的方法. 一.紧凑法 使用紧凑法比较适合左右结构或左中右结构的汉字,这类汉字的构成部分常常可以单个输入.例如"妙"就可以拆分成"女"和"少"两部分,那么就在 Word里先分别输入这两部分,然后将它们选中,打开"格式"

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

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

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

 网站中的缩略图是如何生成的?(C#处理图像) controller层代码: /// <summary>         /// 生成缩略图         /// </summary>         /// <returns></returns>         public ActionResult ThumImg()         {             Response.Clear();             //string origin

轻松实现ASP中页面限权访问

访问|页面 在设计网页时,经常遇到某些页面需限权访问的情况.比如,一个公司的某些产品只让某一或某些供应商或客户浏览.那么,我们如何实现这一功能呢?本文,笔者将向读者介绍几种限制客户访问权限的方法. 通常,我们在设计过程中会面临三种情况:某一页面只让某一用户浏览.某一页面只让某些用户浏览和某些页面只让某些用户浏览.第一种情况很简单,笔者不再叙述,下文将详细介绍后两种情况的设计方法. 一.某一页面只让某些用户浏览 将这些客户的信息保存在数据库中,若能在数据库中检索到客户输入的姓名和密码就允许访问该页

在dotnet中如何使用资源

如何使用资源文件 -------------------------------------------------------------------------------- 摘要.NET 中有一套非常完善的地方化系统被定义在 System.Resources 名字空间中.不过大多数人都被 MissingManifestResourceException 这个错误困惑着.本文就是要让大家了解什么是资源文件,它有什么用处以及如何正确的调用从而避免一些"奇怪"的错误,包括 Missin

教你轻松修改PPT中剪贴画颜色

在制作演示文稿时,为了达到满意的效果我们经常会插入漂亮的剪贴画.但有时起到的效果会相反,因为剪贴画是程序自带的组件,其颜色都是固定的,这样就可能与页面整体的效果不协调.   其实大家不必为其担心,借助图片重新着色功能我们可以轻松修改剪贴画中任意一个区域的颜色.首选中选插入的图片,这样即会出现一个"图片"浮动工具条,如果没有出现可以先右击该剪贴画,选择"显示图片工具栏"命令即可. 接下来单击工具栏上的"图片重新着色"按钮,在打开的窗口左侧可以看到分

如何恢复Windows系统中的缩略图功能

  问:我在图片文件夹中为何找不到缩略图显示的功能了? 答:Windows 2000/XP都带有缩略图功能,但由于一些图形软件被误删除,缩略图功能会突然消失.这时可以单击"开始→运行",输入"regsvr32 c:windowssystemthumbvw.dll"后回车.这里假设您的Windows安装在C:Windows目录. 修复损坏的图标 如果您的系统图标出现了问题,那么删除C:Windows或C:Winnt目录下的ShellIconCache文件,就可以解决问

如何在低版本的Android SDK中生成缩略图——ThumbnailUtils

从Android2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取. 1. static Bitmap createVideoThumbnail(String filePath, int kind)   //获取视频文件的缩略图,第一个参数为视频文件的位置,比如/sdcard/andr