이것은 웹 전체에서 약간의 악명 높은 오류 인 것 같습니다. 시나리오가 맞지 않아서 문제에 대한 답변을 찾지 못했습니다. 이미지를 스트림에 저장하면 예외가 발생합니다.
이상하게도 이것은 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:
내가 지금까지 시도한 것들.
- 이미지를 복제하고 그 작업.
- JPEG 품질 설정으로 MIME에 대한 인코더를 검색합니다.