
/**//// <summary>
/// 获取上传的图片并保存为缩略图
/// </summary>
/// <param name="savePath">上传图片的保存路径(包括文件名和文件的扩展名)</param>
/// <param name="saveThumbnailPath">缩略图的保存路径(包括文件名和文件的扩展名)</param>
/// <param name="objUpImage">允许编程访问服务器上的HTML<input type="file">元素</param>
public void CreateThumbnailImage(string savePath,string saveThumbnailPath,HtmlInputFile objUpImage)
...{
string strFileName = System.IO.Path.GetFileName(objUpImage.PostedFile.FileName);//提取文件名
string strExtension=System.IO.Path.GetExtension(strFileName).ToLower();
System.Drawing.Image image;
if(strExtension==".gif"|| strExtension==".bmp"||strExtension==".jpg"||strExtension==".jpeg"||strExtension==".png")
...{
image=System.Drawing.Image.FromStream(objUpImage.PostedFile.InputStream);
image.Save(savePath,ImageFormat.Jpeg);//保存上传的图片
FrameDimension ImgFrmDim = new FrameDimension( image.FrameDimensionsList[0] );
int nFrameCount = image.GetFrameCount( ImgFrmDim );
decimal width = image.Width;
decimal height = image.Height;
int newwidth, newheight;
if (width > height)
...{
newwidth = 100;
newheight = (int)(height / width * 100);
}
else
...{
newheight = 100;
newwidth = (int)(width / height * 100);
}
for( int i = 0; i < nFrameCount; i++ )
...{
//所有格式的图片都可用,不是GIF格式的可以认为是只有一帧GIF图片
image.SelectActiveFrame( ImgFrmDim, i );//选择图片第几帧
System.IO. MemoryStream stream=new System.IO.MemoryStream();//先将图片保存在内存中,然后再从内存中获取,再生成缩略图时图片背景就不会变黑
image.Save(stream,ImageFormat.Jpeg);//保存
image=System.Drawing.Image.FromStream(stream);//从内存中获取新的图片
image=image.GetThumbnailImage(newwidth, newheight, null, IntPtr.Zero);//获取缩略图
image.Save( saveThumbnailPath, ImageFormat.Jpeg );//生成缩略图
break;//现在只获取第一帧生成图片,去掉break生成所有帧的图片
}
}
else
...{
throw new Exception("上传的图片格式不正确!");
}
}
该博客介绍了如何在服务器端处理用户上传的图片,将其保存并转换为缩略图,特别针对gif图片,通过内存流处理解决了生成缩略图时背景变黑的问题。代码中使用了System.Drawing库,对不同格式的图片进行处理,并提供了异常处理机制。
1992

被折叠的 条评论
为什么被折叠?



