La génération des vignettes d'image dans ASP.NET?

Ce qui est le plus rapide et le plus fiable façon de générer des vignettes .NET? J'ai besoin d'obtenir n'importe quelle image, de le compresser en JPEG et le redimensionner.

J'ai vu plusieurs exemples avec GDI+, certains non-libre composants et je me souviens de WPF a quelques bonnes choses à propos de l'imagerie. GDI+ est assez vieux et WPF trucs peut-être n'a pas d'avantages sur un serveur à l'environnement.

Cela a à travailler dans un ASP.NET MVC de l'application qui s'exécute sur une pleine confiance, et, si possible, de façon synchrone.

Que recommanderiez-vous?

Mise à JOUR:

Basé sur Mantorok réponse j'ai travaillé sur cet exemple, mais c'est toujours GDI+, et il se bloque si j'essaie avec une image grand:

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);
        }
    }
}
Qu'est-ce que l'exception levée?
OutOfMemoryException dans l'Image.FromFile(nom de fichier)
Blimey! Quelle est la taille du fichier!?
8.75 Mb : greatmarta.deviantart.com/art/KovuKiaraCubs-114524760
Une recherche rapide jeté ce jusqu': stackoverflow.com/questions/1108607/...

OriginalL'auteur vtortola | 2011-05-04