这是在ASP.NET应用程序中。
在本地,这段代码运行正常,但是在我们的生产服务器上,当调用Bitmap.Save()时,它会抛出“参数无效”的异常。
我是否应该使用System.Drawing.Bitmap,因为它不是基于此推荐的:
http://msdn.microsoft.com/en-us/library/system.drawing.aspx
不支持使用System.Drawing命名空间中的类 在Windows或ASP.NET服务中。 试图使用这些类 在这些应用程序类型之一 可能会产生意想不到的问题 由于服务性能下降和 运行时异常。
我还能用什么?
Bitmap myBitmap = new Bitmap(img);
myBitmap.SetResolution(img.HorizontalResolution, img.VerticalResolution);
// get the tiff codec info
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/tiff");
// Create an Encoder object based on the GUID for the Compression parameter category
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Compression;
// create encode parameters
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
// save as a tiff
myBitmap.Save(input, myImageCodecInfo, myEncoderParameters);
答案 0 :(得分:1)
我最好的猜测是服务器没有安装tiff编解码器。如果您在Windows Server核心上运行此操作,则GDI +不可用。
答案 1 :(得分:0)
我会验证您传递的输入流。我还要确保将相对路径适当地映射到服务器路径。
答案 2 :(得分:0)
我知道这对每个人都没有帮助,因为某些项目可能是可行的,而对其他项目则不然。
但我解决这个问题的方法是将目标从Framework Version 3.5降低到2.0。
这是我做过的唯一改变,然后才有效。好像3.5搜索另一个版本的GDI + ......
我想尝试的另一件事是使用KB958911中的补丁,但在框架修改为我工作后,我没有试一试。
也许如果你无法降低框架,你可以尝试一下。