0

我目前正在尝试将图像大小调整为缩略图,以便在上传完成后显示为预览。我正在使用 Fineuploader 插件来上传图片的部分。我一直收到“参数无效”。我看过很多与此相关的帖子,并尝试了大部分解决方案,但没有成功。这是代码片段:

    public static byte[] CreateThumbnail(byte[] PassedImage, int LargestSide)  
    {  
        byte[] ReturnedThumbnail = null;  

        using (MemoryStream StartMemoryStream = new MemoryStream(),  
                            NewMemoryStream = new MemoryStream())  
        {  
            StartMemoryStream.Write(PassedImage, 0, PassedImage.Length); //error being fire in this line 

            System.Drawing.Bitmap startBitmap = new Bitmap(StartMemoryStream);  

            int newHeight;  
            int newWidth;  
            double HW_ratio;  
            if (startBitmap.Height > startBitmap.Width)  
            {  
                newHeight = LargestSide;  
                HW_ratio = (double)((double)LargestSide / (double)startBitmap.Height);  
                newWidth = (int)(HW_ratio * (double)startBitmap.Width);  
            }  
            else 
            {  
                newWidth = LargestSide;  
                HW_ratio = (double)((double)LargestSide / (double)startBitmap.Width);  
                newHeight = (int)(HW_ratio * (double)startBitmap.Height);  
            }  

            System.Drawing.Bitmap newBitmap = new Bitmap(newWidth, newHeight);  

            newBitmap = ResizeImage(startBitmap, newWidth, newHeight);  

            newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);  

            ReturnedThumbnail = NewMemoryStream.ToArray(); 
        }  

        return ReturnedThumbnail;  
    }  

我没有想法,任何帮助表示赞赏。

4

2 回答 2

0

您的错误在该new Bitmap(startMemoryStream)行中,而不是在上面的行中。

文档指出,在以下情况下可能会发生此异常:

流不包含图像数据或为空。

-或者-

流包含单个尺寸大于 65,535 像素的 PNG 图像文件。

您应该检查其中是否有有效的 PNG 文件。例如,将其写入文件并尝试在图像查看器中打开它。

于 2013-02-20T16:40:15.070 回答
-1

该代码很危险 - System.Drawing 类的每个实例都必须放在 using(){} 子句中。

ImageResizer这是使用NuGet 包并安全地调整图像大小的替代解决方案。

var ms = new MemoryStream();
ImageResizer.Current.Build(PassedImage, ms, new ResizeSettings(){MaxWidth=LargestSide, MaxHeight=LargestSide});
return ImageResizer.ExtensionMethods.StreamExtensions.CopyToBytes(ms);
于 2013-05-30T14:47:14.233 回答