技术开发 频道

C#实战:PS图片上传图片 同时生成微缩图

  【IT168 技术文档】本文旨在与各位朋友们分享我是如何在项目中用C# “ps图片” 为网站生成同比例微缩图的解决方案。如有不足之处欢迎您指出。

  一、技术概述:

  1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)

  2.C#位图处理 System.Drawing。

  3.最新demo支持IE7,IE8,FireFox。

  二、微缩图处理方法:

       生成微缩图的核心方法:

  CreateThumbnailPicture

/// <summary>        
/// 图片微缩图处理      
/// </summary>        
/// <param name="srcPath">源图片</param>        
/// <param name="destPath">目标图片</param>  
/// <param name="width">宽度</param>  

/// <param name="height">高度</param>        
public static void CreateThumbnailPicture(string srcPath, string destPath, int width, int height)        
{            
//根据图片的磁盘绝对路径获取 源图片 的Image对象            
System.Drawing.Image img
= System.Drawing.Image.FromFile(srcPath);          

//bmp: 最终要建立的 微缩图 位图对象。            Bitmap bmp = new Bitmap(width, height);            
//g: 绘制 bmp Graphics 对象            
Graphics g
= Graphics.FromImage(bmp);            
g.Clear(Color.Transparent);            
//为Graphics g 对象 初始化必要参数,很容易理解。          
g.PixelOffsetMode
= System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;            
g.InterpolationMode
= System.Drawing.Drawing2D.InterpolationMode.High;            
g.SmoothingMode
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;            
g.CompositingQuality
= System.Drawing.Drawing2D.CompositingQuality.HighQuality;            
//源图片宽和高            
int imgWidth = img.Width;            
int imgHeight = img.Height;            
//绘制微缩图            
g.DrawImage(img,
new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, imgWidth, imgHeight)                        , GraphicsUnit.Pixel);            
ImageFormat format
= img.RawFormat;            
ImageCodecInfo info
= ImageCodecInfo.GetImageEncoders().SingleOrDefault(i => i.FormatID == format.Guid);            
EncoderParameter param
= new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);            
EncoderParameters parameters
= new EncoderParameters(1);            
parameters.Param[
0] = param;            
img.Dispose();            
//保存已生成微缩图,这里将GIF格式转化成png格式。            
if (format == ImageFormat.Gif)            
{                
destPath
= destPath.ToLower().Replace(".gif", ".png");                
bmp.Save(destPath, ImageFormat.Png);            
}            
else            
{                
if (info != null)                
{                    
bmp.Save(destPath, info, parameters);                
}              
else                
{                    
bmp.Save(destPath, format);              
}            
}            
img.Dispose();            
g.Dispose();            
bmp.Dispose();      
}
0
相关文章