¿Cuál es la forma más rápida y confiable de generar miniaturas en .NET? Necesito obtener cualquier imagen, comprimirla en JPEG y cambiar su tamaño.¿Genera miniaturas de imágenes en ASP.NET?
He visto varios ejemplos con GDI +, algunos componentes no libres y recuerdo que WPF tiene algunas cosas buenas acerca de la creación de imágenes. GDI + es bastante viejo y las cosas de WPF quizás no tengan ningún beneficio en el entorno de un servidor.
Esto tiene que funcionar en una aplicación ASP.NET MVC que se ejecute con plena confianza y, si es posible, sincrónicamente.
¿Qué recomendarías?
ACTUALIZACIÓN:
Basado en Mantorok's answer he trabajado a cabo este ejemplo, pero aún así es GDI +, y se bloquea si lo intento con una imagen grande:
public void GenerateThumbnail(String filename, Int32? desiredWidth,
Int32? desiredHeight, Int64 quality, Stream s)
{
using (Image image = Image.FromFile(filename))
{
Int32 width=0, height=0;
if ((!desiredHeight.HasValue && !desiredWidth.HasValue) ||
(desiredHeight.HasValue && desiredWidth.HasValue))
throw new ArgumentException(
"You have to specify a desired width OR a desired height");
if (desiredHeight.HasValue)
{
width = (desiredHeight.Value * image.Width)/image.Height;
height = desiredHeight.Value;
}
else
{
height = (desiredWidth.Value * image.Height)/image.Width;
width = desiredWidth.Value;
}
using (var newImage = new Bitmap(width, height))
using (var graphics = Graphics.FromImage(newImage))
using (EncoderParameter qualityParam =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,
quality))
using (EncoderParameters encoderParams = new EncoderParameters(1))
{
graphics.DrawImage(image, 0, 0, width, height);
ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageEncoders().
Single(e => e.MimeType.Equals("image/jpeg",
StringComparison.Ordinal));
encoderParams.Param[0] = qualityParam;
newImage.Save(s, jpegCodec, encoderParams);
}
}
}
Lo que se está lanzando la excepción? – Mantorok
OutOfMemoryException en Image.FromFile (nombre de archivo) – vtortola
Blimey! ¿¡Qué tan grande es el archivo!? – Mantorok