获取上传的图片并保存为缩略图,解决gif背景变黑问题

该博客介绍了如何在服务器端处理用户上传的图片,将其保存并转换为缩略图,特别针对gif图片,通过内存流处理解决了生成缩略图时背景变黑的问题。代码中使用了System.Drawing库,对不同格式的图片进行处理,并提供了异常处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/// <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);
                }

                
forint 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("上传的图片格式不正确!");
            }


        }
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值