这似乎是一个臭名昭著的错误在整个网络。以至于我一直无法找到我的问题的答案,因为我的场景不适合。当我将图像保存到流中时,会抛出一个异常。

奇怪的是,这适用于png,但给出上述错误的jpg和gif,这是相当令人困惑的。

大多数类似的问题都与将图像保存到没有权限的文件有关。具有讽刺意味的是,解决方案是使用内存流,正如我所做的....

public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
    using (var ms = new MemoryStream())
    {
        ImageFormat format;
        switch (imageToConvert.MimeType())
        {
            case "image/png":
                format = ImageFormat.Png;
                break;
            case "image/gif":
                format = ImageFormat.Gif;
                break;
            default:
                format = ImageFormat.Jpeg;
                break;
        }

        imageToConvert.Save(ms, format);
        return ms.ToArray();
    }
}

关于异常的更多细节。这导致这么多问题的原因是缺乏解释:(

System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
   at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters    encoderParams)
   at System.Drawing.Image.Save(Stream stream, ImageFormat format)
   at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
   at Caldoo.Web.Controllers.PictureController.Croppable() in C:\Users\Ian\SVN\Caldoo\Caldoo.Web\Controllers\PictureController.cs:line 132
   at lambda_method(ExecutionScope , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
 InnerException: 

好的,到目前为止我已经试过了。

克隆图像并进行处理。 检索MIME的编码器,传递jpeg质量设置。


当前回答

由于权限而发生错误。确保文件夹有所有的权限。

public Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        Image image = Image.FromStream(ms, true);
        return image;
    }

 img.Save("YOUR PATH TO SAVE IMAGE")

其他回答

导致此错误的另一个原因-您在Bitmap实例的Save方法中指出的路径不存在或您没有提供完整/有效的路径。

刚刚有这个错误,因为我传递了一个文件名,而不是一个完整的路径!

它发生!

解决方法——我遇到了这个问题。对我来说,解决办法是提高IIS服务器上IUSR的磁盘配额。在本例中,我们有一个带有物品等图像的目录应用程序。“匿名Web用户”的上传配额被设置为100MB,这是该特定托管公司的IIS服务器的默认值。我把它升级到400MB,上传图片时没有出错。

这可能不是你的问题,但如果是的话,很容易解决。

这个错误的另一个原因,解决我的problème是你的应用程序没有写权限的某些目录。

所以要完成savindra的回答:https://stackoverflow.com/a/7426516/6444829。

以下是授予IIS_IUSERS文件访问权的方法

提供对ASP的访问。NET应用程序时,必须将访问权限授予IIs_IUSERS。

为特定的文件或文件夹授予读、写和修改权限

In Windows Explorer, locate and select the required file. Right click the file, and then click Properties. In the Properties dialog box, click the Security tab. On the Security tab, examine the list of users. (If your application is running as a Network Service, add the network service account in the list and grant it the permission. In the Properties dialog box, click IIs_IUSERS, and in the Permissions for NETWORK SERVICE section, select the Read, Write, and Modify permissions. Click Apply, and then click OK.

这适用于我的IIS的windows server 2016和本地IIS windows 10。

我在测试服务器上遇到了这个问题,但在活动服务器上没有。 我正在将图像写入流,所以这不是一个许可问题。 我一直直接将一些.dll文件部署到测试服务器。 部署整个解决方案解决了这个问题,所以这可能是一个奇怪的编译不匹配

根据@savindra的回答,如果您对应用程序进行RHM,并尝试以管理员身份运行,那么应该可以解决您的问题。

我的似乎是许可问题。