Clase para convertir imágenes a Bytes y viceversa, para poder ser guardadas en una base de datos

Si alguna vez te has preguntado ¿como guardar una imagen en una base datos?, esta sencilla clase en C# te podría servir, en una base datos no podemos guardar imágenes con su formato original es decir .jpg, .png, .gif, etc, ¿entonces como la debemos guardar? la debemos convertir a bytes para poder almacenarla en la base de datos, luego para poder visualizar la imagen desde una aplicación,  debemos hacer el proceso inverso ¿como así? o sea la debemos convertir de bytes a su formato original (.jpg, .png, .gif, etc), a continuación te dejo el código de la clase:

CÓDIGO

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.IO;

using System.Windows.Forms;

namespace Ejmeplo

{
class Imagen

{

//METODO PARA REDIMENSIONAR LA IMAGEN

public String Redimensionar(Image Imagen_Original, string nombre)

{

//RUTA DEL DIRECTORIO TEMPORAL

String DirTemp = Path.GetTempPath() + @"\" + nombre + ".jpg";

//IMAGEN ORIGINAL A REDIMENSIONAR

Bitmap imagen = new Bitmap(Imagen_Original);

//CREAMOS UN MAPA DE BIT CON LAS DIMENSIONES QUE QUEREMOS PARA LA NUEVA IMAGEN

Bitmap nuevaImagen = new Bitmap(Imagen_Original.Width, Imagen_Original.Height);

//CREAMOS UN NUEVO GRAFICO

Graphics gr = Graphics.FromImage(nuevaImagen);

//DIBUJAMOS LA NUEVA IMAGEN

gr.DrawImage(imagen, 0, 0, nuevaImagen.Width, nuevaImagen.Height);

//LIBERAMOS RECURSOS

gr.Dispose();

//GUARDAMOS LA NUEVA IMAGEN ESPECIFICAMOS LA RUTA Y EL FORMATO

nuevaImagen.Save(DirTemp, System.Drawing.Imaging.ImageFormat.Jpeg);

//LIBERAMOS RECURSOS

nuevaImagen.Dispose();

imagen.Dispose();

return DirTemp;

}

//FUNCION PARA CONVERTIR LA IMAGEN A BYTES

public Byte[] Imagen_A_Bytes(String ruta)

{

FileStream foto = new FileStream(ruta, FileMode.OpenOrCreate, FileAccess.ReadWrite);

Byte[] arreglo = new Byte[foto.Length];

BinaryReader reader = new BinaryReader(foto);

arreglo = reader.ReadBytes(Convert.ToInt32(foto.Length));

return arreglo;

}

//FUNCION PARA CONVERTIR DE BYTES A IMAGEN

public Image Bytes_A_Imagen(Byte[] ImgBytes)

{

Bitmap imagen = null;

Byte[] bytes = (Byte[])(ImgBytes);

MemoryStream ms = new MemoryStream(bytes);

imagen = new Bitmap(ms);

return imagen;

}


}

}

Descargar código fuente Aquí

Dudas, escríbeme a:

Autor: Nelson Y. López Hidalgo

Email: nelson.hidalgo1@gmail.com

Publicado el 22 marzo 2010 en C#. Añade a favoritos el enlace permanente. 9 comentarios.

  1. oies una duda funciona igual para aspx???

  2. Sabes cómo se haría la función Image Bytes_A_Imagen para php
    Un saludo y muchas gracias

    • Tocara investigar un poco, pero no veo la necesidad de hacer eso, es mas liviano y fácil guardar en una carpeta las imagines y en una tabla el nombre de dichas imágenes, para luego concatenar las con la ruta de las fotos, es la forma mas usada y creo que es la primera opción que todo desarrollador debe contemplar, bye hasta pronto y disculpa por la respuesta tan tardía.

  3. auxilio, tu codigo me manda errores

    Error 1 Asegúrese de que la clase definida en este archivo de código concuerda con el atributo ‘inherits’ y que extiende la clase base correcta (p. ej. Page o UserControl). C:\Users\BECARIO2\Documents\Visual Studio 2010\ultimo\Default.aspx.cs 8 33 C:\…\ultimo\
    Error 2 ‘ASP.default_aspx.GetTypeHashCode()’: no se encontró ningún miembro adecuado que invalidar c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\ultimo\a802fb08\a1e6458\App_Web_asprh4lk.0.cs
    Error 3 ‘ASP.default_aspx.ProcessRequest(System.Web.HttpContext)’: no se encontró ningún miembro adecuado que invalidar c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\ultimo\a802fb08\a1e6458\App_Web_asprh4lk.0.cs
    Error 4 ‘ASP.default_aspx’ no implementa el miembro de interfaz ‘System.Web.IHttpHandler.IsReusable’ c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\ultimo\a802fb08\a1e6458\App_Web_asprh4lk.0.cs

  4. Como puedo recuperar la imagen de nuevo a mi programa original despues de guardarlo en la base de datos?

  5. aracelly1700

    me gusta tu codigo pero eso codigo tambien me puede guardar (cualquier tipo de documentos o archivos) en la base de datos sql server desdes visual stuido o estaecho pagina web
    si no en escritorio me podrias ayudar

  6. No me reconoce la funcion .FromStream ….que podrá ser? y tengo agregados los dos using a mi clase

  7. Buena noche Nelson, quisiera adaptarlo en vb.net…quiero mostrar la imagen guardad en sql en un REPORTING (rdlc), actualmente lo tengo para guardar y mostrar como IMAGE…pero no muestra nada..
    Saludos…

Replica a aracelly1700 Cancelar la respuesta