2009-12-18 16 views
6

Tengo un archivo de imagen que es un archivo de 6k jpg con ancho: 172px y alto: 172px.C# por qué cambiar el tamaño de la imagen aumentará el tamaño del archivo

uso el siguiente código a tratar de cambiar su tamaño para archivos de 128 * 128px jpg:

public static Image ResizeImage(Image img, int width, int height) 
    { 
     var b = new Bitmap(width, height, PixelFormat.Format24bppRgb); 

     using (Graphics g = Graphics.FromImage(b)) 
     { 
      g.DrawImage(img, 0, 0, width, height); 
     } 

     return b; 
    } 

Este código se ha incrementado extrañamente el tamaño del archivo de 50k, puede explicar por qué cualquiera? y cómo cambiar el tamaño de la imagen a 128 * 128px y mantener el tamaño alrededor de 6k.

Muchas gracias.

DY

+0

¿Cuál es el tamaño del archivo si omite g.SmoothingMode = SmoothingMode.AntiAlias? – stuartd

+0

perdón Stuart, ¿qué quieres decir? –

+4

@DotNet Usuario, ¿por qué editó la línea 'g.SmoothingMode = SmoothingMode.AntiAlias' y luego le preguntó a @Stuart a qué se refería? Sus preguntas parecen bastante claras. – jball

Respuesta

11

Depende del algoritmo que se utilizó para comprimir el archivo JPEG. Ciertos algoritmos son más con pérdidas (pierden calidad de imagen) que otros, pero se benefician de un tamaño más pequeño.

Lo que sucede es que en el código, el jpeg se está expandiendo en un mapa de bits mientras está en la memoria. Cuando fue a guardar el jpeg de 128x128, el código utilizó un algoritmo que hace menos compresión que el usado para guardar la imagen original. Esto hizo que produjera un archivo jpeg más grande, aunque el tamaño de la imagen en sí mismo es más pequeño.

+0

Hola Santosc, muchas gracias. He pasado toda una noche en esto. ¿Proporcionaría un ejemplo de cómo configurar esto? –

+0

¿Puedes mostrar el código que usas para guardar el archivo en un jpeg? – santosc

+4

Aquí hay un artículo que muestra cómo configurar programáticamente el nivel de compresión JPEG: http://msdn.microsoft.com/en-us/library/bb882583.aspx – David

6

En el código publicado, no está devolviendo el archivo JPEG, pero el mapa de bits (128x128 24bpp bitmap sin comprimir tiene un tamaño de 48kB). Tienes que comprimirlo de nuevo, this tutorial podría ayudar.

Cuestiones relacionadas