日期:2014-05-18  浏览次数:20441 次

如何提高WEB中生成缩略图的效率
我的web系统中,需要浏览缩略图,现在的流程是:
1.用户在A页面点击按钮后,提交到服务端开始生成200张图片的缩略图
2.生成完成后,跳转到B页面,显示缩略图。

现在1,2两个步骤需要将近2分钟,十分耗时。请问该如何提高速度。检查后发现耗时主要是在生成缩略图的时候,生成缩略图的代码如下:
foreach   (FileInfo   f   in   fiArr)
{
//缩略图产生
if(f.Extension.ToLower().Equals( ".jpg ")   ||     f.Extension.ToLower().Equals( ".jpeg ")||     f.Extension.ToLower().Equals( ".gif ")||     f.Extension.ToLower().Equals( ".bmp ")||     f.Extension.ToLower().Equals( ".png ")   )
{
System.Drawing.Image   oImage   =   System.Drawing.Image.FromFile(f.FullName);  
int   oWidth   =   oImage.Width;   //原图宽度  
int   oHeight   =   oImage.Height;   //原图高度  
int   tWidth   =   90;   //设置缩略图初始宽度  
int   tHeight   =   90;   //设置缩略图初始高度  
//按比例计算出缩略图的宽度和高度  
if(oWidth   > =   oHeight)  
{  
tHeight   =   (int)Math.Floor(Convert.ToDouble(oHeight)   *   (Convert.ToDouble(tWidth)   /   Convert.ToDouble(oWidth)));  
}  
else  
{  
tWidth   =   (int)Math.Floor(Convert.ToDouble(oWidth)   *   (Convert.ToDouble(tHeight)   /   Convert.ToDouble(oHeight)));  
}  
//生成缩略原图  
Bitmap   tImage   =   new   Bitmap(tWidth,tHeight);  
Graphics   g   =   Graphics.FromImage(tImage);  
g.InterpolationMode   =   System.Drawing.Drawing2D.InterpolationMode.High;   //设置高质量插值法  
g.SmoothingMode   =   System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置高质量,低速度呈现平滑程度  
g.Clear(Color.Transparent);   //清空画布并以透明背景色填充  
g.DrawImage(oImage,new   Rectangle(0,0,tWidth,tHeight),new   Rectangle(0,0,oWidth,oHeight),GraphicsUnit.Pixel);  
string   tFullName   =   oFullDir   +   f.Name;   //保存缩略图的物理路径  
try  
{  
//以JPG格式保存图片  
tImage.Save(tFullName,System.Drawing.Imaging.ImageFormat.Jpeg);  
}  
catch(Exception   ex)  
{  
throw   ex;  
}  
finally  
{  
//释放资源  
oImage.Dispose();  
g.Dispose();  
tImage.Dispose();  
}  
}
else
{
continue;
}
}

------解决方案--------------------
up
------解决方案--------------------
我有个问题,你的图片是不是会装载到一个img控件上,可以直接设置img的宽和高,这样应该可以吧
------解决方案--------------------
那样很大的,速度很慢
------解决方案--------------------
那就缓存一下呗
------解决方案--------------------
支持楼上!