Augusto Humire Martinez web blog

algo de web-in

Como redimensionar una imagen en .NET

alguna vez les ocurrio que quisieron hacer su backup de sus archivos y se dieron cuenta que en fotos tenian GIGAS que ocupaban el disco?

Bueno a mi me paso y es asi que rapidamente trate de buscarla razon, y la razon era que el tamaño de las imagenes era muy grandes por foto en mi caso eran 2.8Mb/f   y me puse a buscar como reducir el tamaño de mis imagenes par que no me ocupen espacio, y encontre nuestro infaltable paint, pero me aburri tratando de reducir el tamaño uno a uno, asi que pense si seria dificil reducirlas en batch usando algun tipo de programa de esos que editan imagenes, y la verdad de todo lo que busque (no soy un guru en imagenes) no encontre a ninguno que reduzca el tamaño en batch, asi que se me ocurrio escribir uno (a falta de pan, …bizcocho), y les contare como lo hice, ahi les va.

Lenguaje: C#
Plataforma: .NET
version Plataforma: 3.5
Codigo: aqui (Cambie la extension por “.rar” y luego descomprima)
Ejecutable: aqui (Cambie la extension por “.rar” y luego descomprima)

El codigo en realidad es sencillo (escrito en C# .NET) pero ayudará, las tres clases principalmente usadas son Image, Bitmap, Graphics y MemoryStream, y el codigo principal es como el que tienen a continuacion:

primero las referencias

using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

ahora el metodo principal o core como le dicen algunos

private Image Redimensionar(Image Imagen, int Ancho, int Alto, int resolucion)
{
//Bitmap sera donde trabajaremos los cambios
using (Bitmap imagenBitmap = new Bitmap(Ancho, Alto, PixelFormat.Format32bppRgb))
{
imagenBitmap.SetResolution(resolucion, resolucion);
//Hacemos los cambios a ImagenBitmap usando a ImagenGraphics y la Imagen Original(Imagen)
//ImagenBitmap se comporta como un objeto de referenciado

using (Graphics imagenGraphics = Graphics.FromImage(imagenBitmap))
{
imagenGraphics.SmoothingMode = SmoothingMode.AntiAlias;
imagenGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
imagenGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
imagenGraphics.DrawImage(Imagen, new Rectangle(0, 0, Ancho, Alto), new Rectangle(0, 0, Imagen.Width, Imagen.Height), GraphicsUnit.Pixel);
//todos los cambios hechos en imagenBitmap lo llevaremos un Image(Imagen) con nuevos datos a travez de un MemoryStream
MemoryStream imagenMemoryStream = new MemoryStream();
imagenBitmap.Save(imagenMemoryStream, ImageFormat.Jpeg);
Imagen = Image.FromStream(imagenMemoryStream);
}
}
return Imagen;
}

la siguiente porcion de codigo en un metodo sobrecargado de Redimensionar solo contiene el calculo del nuevo ancho, alto y la resolucion, argumentos para realizar una llamada a private Image Redimensionar(Image Imagen, int Ancho, int Alto, int resolucion), es decir calcula los valores nuevos antes de realizar el verdadero cambio de tamaño de imagen

private Image Redimensionar(Image image, int SizeHorizontalPercent, int SizeVerticalPercent)
{
//Obntenemos el ancho y el alto a partir del porcentaje de tamaño solicitado
int anchoDestino = image.Width * SizeHorizontalPercent / 100;
int altoDestino = image.Height * SizeVerticalPercent / 100;
//Obtenemos la resolucion original
int resolucion = Convert.ToInt32(image.HorizontalResolution);

return this.Redimensionar(image, anchoDestino, altoDestino, resolucion);
}

la siguiente porcion de codigo es la que dispara los metodos mencionados arriba

//Obtenemos la imagen del filesystem
Image image = Image.FromFile(“C:\MisImagenes\foto1.jpg”);
//Redimensionamos la imagen
image = this.Redimensionar(image, 30, 30);
//Guardamos la imagen modificada
image.Save(“C:\OtraCarpeta\foto1.jpg”);
image.Dispose();

Recuerde el metodo private Image Redimensionar(Image image, int SizeHorizontalPercent, int SizeVerticalPercent) la usamos para redimensionar y le bridamos el porcentaje que queremos de tamaño de nuestra imagen usando como referencia el tamaño de la imagen original y este metodo despues de calcular los nuevos tamaños recien llama a private Image Redimensionar(Image Imagen, int Ancho, int Alto, int resolucion). Es decir para nuestro ejemplo decimos que la imagen nueva sea redimensionada al 30% de su tamaño original de ancho y de alto, si nuestra imagen original fuera de 3000   x   3000 el nuevo tamaño sera de 900   x   900   que es el equivalente a el 30% de 3000 pixeles. bueno eso es todo.

Y recuerden… “no destruyan el planeta”, …que no tenemos otro.

Preguntas, comentarios o Sugerencias por este mismo canal.

febrero 17, 2009 - Posted by | .NET

8 comentarios »

  1. gracias, muy interesante =D Saludos

    Comentario por werol | abril 15, 2010

  2. Gracias Augusto!! me has ayudado muchisimo en este asunto.

    Saludos desde Mexico!.

    Comentario por Anónimo | marzo 10, 2012

  3. como lo hago en formularios web

    Comentario por Anónimo | marzo 27, 2012

  4. gracias muy bueno

    Comentario por Anónimo | octubre 3, 2012

  5. Muchas gracias

    Comentario por Alexx Glez | noviembre 30, 2012

  6. Excelente, gracias por postear esto, pero ahora tengo el siguiente problema, al extraer la imagen redimensionada desde la base de datos para presentarla en un sistema de reporte me aparece la imagen con un ligero borde , cuando guardo la imagen desde algún otro programa como paint no sucede esto, ¿hay alguna forma de solucionarlo?

    Comentario por Anónimo | julio 12, 2013

  7. Gracias amigo, donde dices ImageFormat.Jpeg….que pasaría si la foto no es .Jpeg? Si es .gif por ejemplo?
    La transforma directamente a .JPEG o daría un error?
    Un saludo y gracias de antemano

    Comentario por Iván | junio 24, 2014

  8. Gracias. Me ayudó bastante tu post.

    Comentario por Anónimo | abril 9, 2015


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: