C# GDI+;中发生一般性错误;上传后
我使用此代码在我的web mvc上调整图像大小,它在我的vs 2012上运行良好,但当我将其上载到服务器上时,此错误发生在我身上: 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
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);
}