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.
oies una duda funciona igual para aspx???
Si
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.
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
Como puedo recuperar la imagen de nuevo a mi programa original despues de guardarlo en la base de datos?
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
No me reconoce la funcion .FromStream ….que podrá ser? y tengo agregados los dos using a mi clase
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…