Какой самый быстрый и надежный способ создания миниатюр в .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);
}
}
}