asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式

简介:

None.gif 在网站开发时,生成缩略图是一个非常常见和实用的功能.以前在asp里只能借助com组件实现,现在在.net里可以利用框架的强大的类库轻松实现.下面帖出完整的代码(带详细注释),参考了网上的一些文章及.net sdk相关内容.QQROOM网络家园的图片上传用到了所有的4种生成方式.
None.gif
ExpandedBlockStart.gif        
/// <summary>
InBlock.gif        
/// 生成缩略图
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="originalImagePath">源图路径(物理路径)</param>
InBlock.gif        
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
InBlock.gif        
/// <param name="width">缩略图宽度</param>
InBlock.gif        
/// <param name="height">缩略图高度</param>
ExpandedBlockEnd.gif        
/// <param name="mode">生成缩略图的方式</param>    

None.gif          public   static   void  MakeThumbnail( string  originalImagePath,  string  thumbnailPath,  int  width,  int  height,  string  mode)
ExpandedBlockStart.gif        
{
InBlock.gif            Image originalImage 
= Image.FromFile(originalImagePath);
InBlock.gif            
InBlock.gif            
int towidth = width;
InBlock.gif            
int toheight = height;
InBlock.gif        
InBlock.gif            
int x = 0;
InBlock.gif            
int y = 0;
InBlock.gif            
int ow = originalImage.Width;
InBlock.gif            
int oh = originalImage.Height;        
InBlock.gif
InBlock.gif            
switch (mode)
ExpandedSubBlockStart.gif            
{        
InBlock.gif                
case "HW"://指定高宽缩放(可能变形)                
InBlock.gif
                    break;
InBlock.gif                
case "W"://指定宽,高按比例                    
InBlock.gif
                    toheight = originalImage.Height * width/originalImage.Width;
InBlock.gif                    
break;
InBlock.gif                
case "H"://指定高,宽按比例
InBlock.gif
                    towidth = originalImage.Width * height/originalImage.Height;                    
InBlock.gif                    
break;        
InBlock.gif                
case "Cut"://指定高宽裁减(不变形)                
InBlock.gif
                    if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight)
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        oh 
= originalImage.Height;
InBlock.gif                        ow 
= originalImage.Height*towidth/toheight;
InBlock.gif                        y 
= 0;
InBlock.gif                        x 
= (originalImage.Width - ow)/2;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
else
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        ow 
= originalImage.Width;
InBlock.gif                        oh 
= originalImage.Width*height/towidth;
InBlock.gif                        x 
= 0;
InBlock.gif                        y 
= (originalImage.Height - oh)/2;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
break;                    
InBlock.gif                
default :
InBlock.gif                    
break;
ExpandedSubBlockEnd.gif            }
    
InBlock.gif            
InBlock.gif            
//新建一个bmp图片
InBlock.gif
            Image bitmap = new System.Drawing.Bitmap(towidth,toheight);
InBlock.gif
InBlock.gif            
//新建一个画板
InBlock.gif
            Graphics g = System.Drawing.Graphics.FromImage(bitmap);
InBlock.gif
InBlock.gif            
//设置高质量插值法
InBlock.gif
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif
InBlock.gif            
//设置高质量,低速度呈现平滑程度
InBlock.gif
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif
InBlock.gif            
//清空画布并以透明背景色填充
InBlock.gif
            g.Clear(Color.Transparent);        
InBlock.gif
InBlock.gif            
//在指定位置并且按指定大小绘制原图片的指定部分
InBlock.gif
            g.DrawImage(originalImage, new Rectangle(00, towidth, toheight), 
InBlock.gif                
new Rectangle(x, y, ow,oh),
InBlock.gif                GraphicsUnit.Pixel);
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gif            
{            
InBlock.gif                
//以jpg格式保存缩略图
InBlock.gif
                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch(System.Exception e)
ExpandedSubBlockStart.gif            
{
InBlock.gif                
throw e;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
finally
ExpandedSubBlockStart.gif            
{
InBlock.gif                originalImage.Dispose();
InBlock.gif                bitmap.Dispose();                        
InBlock.gif                g.Dispose();
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
None.gif关键方法Graphics.DrawImage见ms
- help: // MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm
None.gif

None.gif




本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2006/02/26/337957.html,如需转载请自行联系原作者
相关文章
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
15天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
21 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
109 5
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
124 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
119 0
|
10月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
145 0
|
10月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
123 0
|
10月前
|
开发框架 前端开发 .NET
ASP.NET Core MVC 从入门到精通之自动映射(二)
ASP.NET Core MVC 从入门到精通之自动映射(二)
63 0