在.NET中生成縮略圖的最快和最可靠的方法是什麼?我需要得到任何圖像,以JPEG格式壓縮並調整大小。在ASP.NET中生成圖像縮略圖?
我見過幾個GDI +的例子,一些非自由組件,我記得WPF有一些關於圖像的好東西。 GDI +很老,WPF的東西可能對服務器環境沒有任何好處。
這必須在完全信任的運行的ASP.NET MVC應用程序中運行,並且如果可能的話同步運行。
你會推薦什麼?
UPDATE:
基於Mantorok's answer我已經制定了這個例子,但它仍然是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);
}
}
}
什麼是異常被拋出? – Mantorok 2011-05-05 11:38:26
Image.FromFile中的OutOfMemoryException(文件名) – vtortola 2011-05-06 17:01:57
Blimey!文件有多大!? – Mantorok 2011-05-09 10:20:02