C# GDI+;中发生一般性错误;上传后

C# GDI+;中发生一般性错误;上传后,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我使用此代码在我的web mvc上调整图像大小,它在我的vs 2012上运行良好,但当我将其上载到服务器上时,此错误发生在我身上: GDI+中出现一般错误。] System.Drawing.Image.Save(字符串文件名、ImageCodeInfo编码器、, 编码器参数编码器参数)+811245实用压缩图像(图像 img,字符串路径,图像压缩ic)+431 publicstaticvoidresizeimage(此流为inputStream,int-width,int-height,stri

我使用此代码在我的web mvc上调整图像大小,它在我的vs 2012上运行良好,但当我将其上载到服务器上时,此错误发生在我身上:

GDI+中出现一般错误。]
System.Drawing.Image.Save(字符串文件名、ImageCodeInfo编码器、, 编码器参数编码器参数)+811245实用压缩图像(图像 img,字符串路径,图像压缩ic)+431

publicstaticvoidresizeimage(此流为inputStream,int-width,int-height,stringsavepath,imagecompersion ic=imagecompersion.Normal)
{
System.Drawing.Image img=新位图(inputStream);
System.Drawing.Image result=新位图(宽度、高度、像素格式.Format24bppRgb);
使用(Graphics g=Graphics.FromImage(结果))
{
g、 合成质量=System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g、 插值模式=System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g、 SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g、 绘图图像(img,0,0,宽度,高度);
}
结果。压缩图像(保存路径,ic);
}
公共静态无效压缩图像(此System.Drawing.Image img、字符串路径、ImageCompersion ic)
{
System.Drawing.Imaging.EncoderParameter qualityParam=新的编码器参数(System.Drawing.Imaging.Encoder.Quality,转换为32(ic));
ImageFormat格式=img.RawFormat;
ImageCodecInfo codec=ImageCodecInfo.GetImageDecoders().FirstOrDefault(c=>c.FormatID==format.Guid);
字符串mimeType=codec==null?“图像/jpeg”:codec.mimeType;
ImageCodecInfo jpegCodec=null;
ImageCodecInfo[]codecs=ImageCodecInfo.GetImageEncoders();
对于(int i=0;i

  • 确保目标文件夹具有读/写权限,并且目标驱动器上有可用空间
  • 确保托管提供商允许您在其共享服务器上使用
    内存拖缆。大多数情况下,他们不会

  • 据我所知,类上没有
    CompressImage
    方法,这意味着它可能是一个扩展方法,
    Utility.CompressImage
    方法。由于堆栈位于该方法内部,您可以共享该方法的源吗?确保您的目标文件夹具有读/写权限i编辑问题和附加压缩功能您是否检查了jpeg编解码器?(JPEG编解码器!=null)
         public static void ResizeImage(this Stream inputStream, int width, int height, string savePath, ImageComperssion ic = ImageComperssion.Normal)
            {
                System.Drawing.Image img = new Bitmap(inputStream);
                System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                using (Graphics g = Graphics.FromImage(result))
                {
                    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.DrawImage(img, 0, 0, width, height);
                }
                result.CompressImage(savePath, ic);
            }
    
    public static void CompressImage(this System.Drawing.Image img, string path, ImageComperssion ic)
        {
            System.Drawing.Imaging.EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Convert.ToInt32(ic));
            ImageFormat format = img.RawFormat;
            ImageCodecInfo codec = ImageCodecInfo.GetImageDecoders().FirstOrDefault(c => c.FormatID == format.Guid);
            string mimeType = codec == null ? "image/jpeg" : codec.MimeType;
            ImageCodecInfo jpegCodec = null;
            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            for (int i = 0; i < codecs.Length; i++)
            {
                if (codecs[i].MimeType == mimeType)
                {
                    jpegCodec = codecs[i];
                    break;
                }
            }
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;
            img.Save(path, jpegCodec, encoderParams);
        }