Создание эскизов изображений в ASP.NET?

Какой самый быстрый и надежный способ создания эскизов в .NET? Мне нужно получить любое изображение, сжать его в JPEG и изменить его размер.

Я видел несколько примеров с GDI +, некоторыми несвободными компонентами, и я помню, что в WPF есть несколько хороших вещей о создании изображений. GDI + довольно старый, и материалы WPF, возможно, не имеют преимуществ в серверной среде.

Это должно работать в приложении ASP.NET MVC, которое работает с полным доверием и, если возможно, синхронно.

Что бы вы сделали рекомендовать?

ОБНОВЛЕНИЕ:

На основе ответа Манторока Я отработал этот пример, но он все еще GDI +, и он вылетает, если я пытаюсь использовать большое изображение:

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);
        }
    }
}

16
задан Community 23 May 2017 в 12:22
поделиться