net imagesharp fromstream asp c# asp.net .net image gdi+

c# - imagesharp - skiasharp



Se produjo un error genérico en GDI+en System.Drawing.Image.Save (4)

Asegúrese de que la ruta especificada sea válida. Usando la respuesta anterior (con los usos en el flujo de memoria), aún puede obtener este error exacto "Error genérico en GDI +" si la ruta del archivo no existe. El archivo será creado, la ruta del directorio debe existir.

Excepción:

Se produjo un error genérico en GDI +. en System.Drawing.Image.Save (nombre de archivo String, encoder ImageCodecInfo, EncoderParameters encoderParams) en System.Drawing.Image.Save (nombre de archivo String, formato ImageFormat) en System.Drawing.Image.

Código:

byte[] bitmapData = new byte[imageText.Length]; MemoryStream streamBitmap; bitmapData = Convert.FromBase64String(imageText); streamBitmap = new MemoryStream(bitmapData); System.Drawing.Image img = Image.FromStream(streamBitmap); img.Save(path);

Convertimos una cadena base64 en un MemoryStream y luego creamos un System.Drawing.Image (Image.FromStream (streamBitmap)). Al final la imagen se guarda en un archivo temporal.

Lo extraño es que el problema parece ocurrir cuando la actividad (número de usuarios concurrentes) es alta en el servidor web y el problema se resuelve temporalmente después de que un IISRESET o un grupo de aplicaciones se recicle ...

==> problema de recolector de basura?

Ya he comprobado el permiso de la carpeta TEMP ...


Cuando está cargando una imagen de una transmisión, debe mantener la transmisión abierta durante toda la vida útil de la imagen, consulte MSDN Image.FromStream .

Creo que la excepción se debe a que la secuencia de memoria se cierra incluso antes de que se elimine la imagen. Puedes cambiar tu código así

byte[] bitmapData = new byte[imageText.Length]; bitmapData = Convert.FromBase64String(imageText); using (var streamBitmap = new MemoryStream(bitmapData) { using (img = Image.FromStream(streamBitmap)) { img.Save(path); } }

Aquí hay algunos enlaces a hilos que discuten problemas similares

gdi + error guardando imagen de página web

Al dibujar una imagen: System.Runtime.InteropServices.ExternalException: Se produjo un error genérico en GDI


En mi caso, el fragmento de código A continuación funciona bien donde ConvertedImageString es la cadena Base64Image recibida de la API y la convierto en una imagen relacionada con formato y la guardaré en la carpeta de archivos físicos en el Servidor. Edición: el error anterior puede deberse a una ruta de archivo incorrecta en la que intenta guardar la imagen

string converted = ConvertedImageString.Replace(''-'', ''+''); converted = converted.Replace(''_'', ''/''); using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(ConvertedImageString))) { using (Bitmap bm1 = new Bitmap(ms)) { newFileName = id + ".jpg"; newFileName = CleanFileName(newFileName); newFileName = newFileName.Replace(" ", "_"); Path = Path + newFileName; bm1.Save(Path, ImageFormat.Jpeg); } }


Encontré el mismo mensaje de excepción al guardar una imagen. Resultó que mi código estaba bien y hacer lo que se suponía que debía hacer.

El problema era que el disco duro estaba lleno, por lo que no se podía crear la nueva imagen. Solo noté esto al intentar guardar el proyecto en el que estaba trabajando, ya que no tenía espacio para guardar.