让CS的头像支持GIF动画

在CS中用户上传的头像是要经过处理的,具体的参见CS代码Components\Resources.cs,程序将上传的图片先转换成Bitmap再进行缩放处理,这样,GIF动画便成了静态图了。

因为有几个用户提到了这个,所以,把头像处理稍微改了一下,如果用户上传的图片大小小于设定的大小的话,就不进行处理,否则进行缩放,所以,大于设定大小的图片也会变成静态图的。代码如下:

public static void UpdateAvatar (int userID, Stream postedFile)  

    
// TODO : allow default image format to be controlled through admin configuration 
    
// 
    ImageFormat format = ImageFormat.Jpeg; 

    
// 上传图像的大小 
    
// 
    int contentLength = (int)postedFile.Length; 

    
// validate stream 
    if (contentLength <= 0
        
return

    
// resize image 
    MemoryStream image = ResizeImage (postedFile, SiteSettingsManager.GetSiteSettings().AvatarHeight, SiteSettingsManager.GetSiteSettings().AvatarWidth, format); 
     
    
// write the avatar to storage 
    CommonDataProvider dp = CommonDataProvider.Instance(); 
     
    
/* **************************************************************************** 
        * 标题: 修改上传头像保存位置 
        * 内容: 如果设置上传头像的保存位置为硬盘的话,则将头像保存在指定的位置。 
        *       这里没有使用ResizeImage来把图像进行缩放,因为一旦缩放,GIF动画会变成 
        *       静态图,这里结合JS来实现,具体参见UserAvatar代码。 
        *       本来是参考宝玉的上传方式来做的,就是上传了图片之后,将cs_Images中的对 
        *       应的行删掉,再把cs_UserAvatar表中的更新,我在实现的时候出了点问题,忘 
        *       了它们之间的约束关系,后来想到了,但也没有做什么更改,只是把FileName字 
        *       段移到了cs_Images表中。 
        * 修改: 水村 
        * 时间: 2005-04-11  
        * ***************************************************************************
*/
 
    
if( SiteSettingsManager.GetSiteSettings().EnableSaveInDisk ) 
    

        Avatar avatar 
= new Avatar();                 

        System.Drawing.Image avatarImage 
= Image.FromStream( postedFile ); 

        
if( avatarImage.Width > SiteSettingsManager.GetSiteSettings().AvatarWidth || avatarImage.Height > SiteSettingsManager.GetSiteSettings().AvatarHeight ) 
        

            avatarImage 
= Image.FromStream( image ); 
        }
 

        
string avatarPath = HttpContext.Current.Server.MapPath( SiteSettingsManager.GetSiteSettings().AvatarSavePath ); 
        
string fileName = userID.ToString() + FileExt( avatarImage.RawFormat ); 

        avatar.FileName 
= fileName; 
        avatar.ContentType 
= "image/" + FileExt( avatarImage.RawFormat ).Substring(1); 
        avatar.Length 
= contentLength; 
         
        
if!System.IO.Directory.Exists( avatarPath ) ) 
        

            
try 
            

                System.IO.Directory.CreateDirectory( avatarPath ); 
            }
 
            
catch { } 
        }
 
         
        avatarImage.Save( avatarPath 
+ fileName ); 

        dp.CreateUpdateDeleteImage(userID, avatar, DataProviderAction.Update); 
    }
 
    
else 
    

        Avatar avatar 
= new Avatar(image); 
        avatar.ContentType 
= "image/" + format.ToString(); 
        dp.CreateUpdateDeleteImage(userID, avatar, DataProviderAction.Update); 
    }
 
}
 

///  
/// 返回图片的格式的后缀 
///  
/// 图片格式 
/// 后缀字附串 

public static string FileExt( System.Drawing.Imaging.ImageFormat format ) 

    
if( format == ImageFormat.Bmp ) return ".bmp"
    
else if( format == ImageFormat.Gif ) return ".gif"
    
else if( format == ImageFormat.Png ) return ".png"
    
else if( format == ImageFormat.Jpeg ) return ".jpg"
    
else return ".jpg"
}

posted @ 2005-08-22 15:02  水村  阅读(2436)  评论(0编辑  收藏  举报