In GDI +, JPEG Image to MemoryStream ist ein allgemeiner Fehler aufgetreten
Dies scheint ein berüchtigter Fehler im ganzen Web zu sein. So sehr, dass ich keine Antwort auf mein Problem finden konnte, da mein Szenario nicht passt. Eine Ausnahme wird ausgelöst, wenn ich das Bild im Stream speichere.
Seltsamerweise funktioniert dies perfekt mit einem PNG, gibt aber den obigen Fehler mit JPG und GIF, was ziemlich verwirrend ist.
Die meisten ähnlichen Probleme betreffen das Speichern von Bildern in Dateien ohne Berechtigungen. Ironischerweise besteht die Lösung darin, einen Speicherstrom zu verwenden, wie ich es tue ....
<code>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(); } } </code>
Weitere Einzelheiten zur Ausnahme. Der Grund, warum dies so viele Probleme verursacht, ist die fehlende Erklärung :(
<code>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: </code>
OK Dinge, die ich bisher ausprobiert habe.
Klonen Sie das Image und arbeiten Sie daran.Abrufen des Encoders für dieses MIME, der die Einstellung für die JPEG-Qualität enthält.