Conversión imágenes a Base64 y viceversa en C#

Conversión imágenes a Base64 y viceversa en C#

October 11, 2019

En ocasiones, por ejemplo cuando se va a enviar una imagen en un archivo XML, debemos codificar una imagen utilizando Base64.

El proceso de conversión de la imagen a una cadena en Base64 es bastante sencillo.

Simplemente debemos grabar la imagen sobre un stream en memoria, convertirlo a bytes y posteriormente codificarlo en Base64 utilizando la función #i ToBase64String # del objeto #i Convert #:

/// <summary>
///	  Codifica una imagen en Base64
/// </summary>
public string EncodeImage(Image objImage, System.Drawing.Imaging.ImageFormat intFormat)
{ 
	byte[] arrBytImages;
	
	// Abre un stream en memoria para obtener los bytes de la imagen		
	using (System.IO.MemoryStream stmMemory = new System.IO.MemoryStream())
	{ 
		// Graba la imagen en el stream en memoria
		objImage.Save(stmMemory, intFormat);
		// Convierte la imagen en un array de bytes
		arrBytImages = stmMemory.ToArray();
		// Cierra el stream
		stmMemory.Close();
	}
	// Devuelve el array de bytes convertidos
	return Convert.ToBase64String(arrBytImages);
}

El proceso inverso para traducir una cadena codificada en Base64 a una imagen es igualmente sencillo, pero al contrario, es decir, obtenemos el array de bytes a partir de la cadena (utilizando la función FromBase64String del objeto Convert), lo escribimos en memoria y lo leemos en una imagen utilizando el método estático Image.FromStream:

/// <summary>
///		Obtiene una imagen a partir de la codificación en Base64
/// </summary>
public Image GetImage(string strEncoded)
{ 
	byte[] arrBytImage = Convert.FromBase64String(strEncoded);
	Image objImage = null;
		
	// Convierte un array de bytes a una imagen
	using (System.IO.MemoryStream stmBitmap = new System.IO.MemoryStream(arrBytImage, 0, arrBytImage.Length))
	{ 
		// Escribe el array de bytes en el stream de memoria
		stmBitmap.Write(arrBytImage, 0, arrBytImage.Length);
	  	// Carga la imagen del stream
		objImage = Image.FromStream(stmBitmap);
	  	// Cierra el stream
		stmBitmap.Close();
	}
	// Devuelve la imagen
	return objImage;
}