在ASP.NET中生成图像缩略图?

前端之家收集整理的这篇文章主要介绍了在ASP.NET中生成图像缩略图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在.NET中生成缩略图的最快和更可靠的方法是什么?我需要获取任何图像,压缩JPEG并调整大小.

我看过几个GDI的例子,一些非免费的组件,我记得WPF有一些关于成像的好东西. GDI很旧,WPF的东西可能在服务器环境中没有任何好处.

这必须在一个完全信任的ASP.NET MVC应用程序中运行,如果可能,同步运行.

你会推荐什么

更新:

基于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,width,height);
            ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageEncoders().
                Single(e => e.MimeType.Equals("image/jpeg",StringComparison.Ordinal));
            encoderParams.Param[0] = qualityParam;
            newImage.Save(s,jpegCodec,encoderParams);
        }
    }
}

解决方法

对于密集的服务器端代码,我建议您使用除GDI之外的其他技术,GDI尚未设计为通过块(以流式传输方式)处理图像块.

您可以使用Windows Imaging Component 或WPF进行此任务.这里有一个非常好的例子,说明如何快速,更重要 – 可扩展的方式来做到这一点:

The fastest way to resize images from ASP.NET. And it’s (more) supported-ish.

猜你在找的asp.Net相关文章