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

       
/// <param
name=”thumbnailPath”>缩略图路径(物理路径)</param>
       
/// <param name=”width”>缩略图宽度</param>
       
/// <param name=”height”>缩略图高度</param>
       
/// <param
name=”mode”>生成缩略图的方式</param>   

       
public static void MakeThumbnail(string originalImagePath, string
thumbnailPath, int width, int height, string mode)
       
{
           
Image originalImage = Image.FromFile(originalImagePath);
           

           
int towidth = width;
           
int toheight = height;
       

           
int x = 0;
           
int y = 0;
           
int ow = originalImage.Width;
           
int oh =
originalImage.Height;       

           
switch (mode)
           
{       

               
case
“HW”://指定高宽缩放(可能变形)               

                   
break;
               
case
“W”://指定宽,高按比例                   

                   
toheight = originalImage.Height * width/originalImage.Width;
                   
break;
               
case “H”://指定高,宽按比例
                   
towidth = originalImage.Width *
height/originalImage.Height;                   

                   
break;       

               
case
“Cut”://指定高宽裁减(不变形)               

                   
if((double)originalImage.Width/(double)originalImage.Height >
(double)towidth/(double)toheight)
                   
{
                       
oh = originalImage.Height;
                       
ow = originalImage.Height*towidth/toheight;
                       
y = 0;
                       
x = (originalImage.Width – ow)/2;
                   
}
                   
else
                   
{
                       
ow = originalImage.Width;
                       
oh = originalImage.Width*height/towidth;
                       
x = 0;
                       
y = (originalImage.Height – oh)/2;
                   
}
                   
break;                   

               
default :
                   
break;
           
}   
           

           
//新建一个bmp图片
           
Image bitmap = new
System.Drawing.Bitmap(towidth,toheight);

           
//新建一个画板
           
Graphics g = System.Drawing.Graphics.FromImage(bitmap);

           
//设置高质量插值法
           
g.InterpolationMode =
System.Drawing.Drawing2D.InterpolationMode.High;

           
//设置高质量,低速度呈现平滑程度
           
g.SmoothingMode =
System.Drawing.Drawing2D.SmoothingMode.HighQuality;

           
//清空画布并以透明背景色填充
           
g.Clear(Color.Transparent);       

           
//在指定位置并且按指定大小绘制原图片的指定部分
           
g.DrawImage(originalImage, new Rectangle(0, 0, towidth,
toheight),
               
new Rectangle(x, y, ow,oh),
               
GraphicsUnit.Pixel);

           
try
           
{           

               
//以jpg格式保存缩略图
               
bitmap.Save(thumbnailPath,
System.Drawing.Imaging.ImageFormat.Jpeg);
           
}
           
catch(System.Exception e)
           
{
               
throw e;
           
}
           
finally
           
{
               
originalImage.Dispose();
               
bitmap.Dispose();                       

               
g.Dispose();
           
}
       
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注