需要一些精简库/代码,将创建缩略图,是最佳的使用与ASP.净MVC

本文关键字:最佳 略图 MVC ASP 创建 代码 | 更新日期: 2023-09-27 18:12:50

下面是从数据库返回图像的操作方法,我需要一些lite库或编写自己的代码,如果短,将根据我的要求调整大小和压缩这些图像"制作缩略图",然后将它们传递给HTTP响应。

EDIT:实际上想到它,也许最好将缩略图保存在额外的列中,所以现在我需要一种方法来压缩和调整图像的大小,然后将它们保存到数据库中,而不是保存未触碰到的副本。保存图片最初通过传递HttpPostedFileBase,现在需要一些工具,将调整和压缩之前保存到数据库。

public FileContentResult GetImage(int LineID)
{
    var PMedia = repository.ProductMedias.FirstOrDefault(x => x.LineID == LineID);
    if (PMedia != null)
    {
        return File(PMedia.ImageData, PMedia.ImageMimeType, PMedia.FileName);
    }
    else
    {
        return null;
    }
} 

需要一些精简库/代码,将创建缩略图,是最佳的使用与ASP.净MVC

每次缩略图的大小都不同吗?否则,最好有另一个列/存储与调整大小的照片为您的缩略图,而不是每次处理它们。

System.Drawing可以很容易地创建缩略图。但是,ASP不支持使用它。. NET有很多好的理由。

但是,如果您接受Erik Philips的建议并预先生成所有缩略图并将它们与原始缩略图一起存储在数据库中,那么可以想象,您将拥有某种进程(如Windows服务),该进程将定期为需要它们的行生成拇指。因为这个过程将连续生成拇指,所以您不会像在ASP中那样担心使用System.Drawing。. NET应用程序(您可以很容易地让多个线程吞噬System.Drawing封装的相对稀缺的系统资源)。

编辑:我刚刚注意到MVC标签。我不知道System.Drawing是否与MVC可用,或者它是否被其他东西所取代。一般来说,. net总是内置有用的图形库,可以很容易地完成大多数简单的事情(我不会说它只完成简单的事情,因为Graphics.DrawImage(...)方法的30次重载证明了这一点),所以我希望你仍然可以在MVC中做到这一点。

别白费力气了!有一个非常好的,免费的(实际上是开源的),纯。net库,可用于API或处理程序:

http://imageresizing.net/

它支持非常高质量的调整大小,转换到一堆格式,自动裁剪,旋转,水印…

如果你认为"不,我可以自己做!",这里有20个你不应该做的理由:

http://nathanaeljones.com/163/20-image-resizing-pitfalls/

下面是我用来制作缩略图的例程:

    public void MakeThumbnail(string imagePath)
    {
        // Image exists?
        if (string.IsNullOrEmpty(imagePath)) throw new FileNotFoundException("Image does not exist at " + imagePath);
        // Default values
        string Filename = imagePath.ToLower().Replace(".jpg", "_thumb.jpg");
        int Width = 100; // 180;
        int Height = 75; // 135;
        bool lSaved = false;
        // Load image
        Bitmap bitmap = new Bitmap(imagePath);
        // If image is smaller than just save
        try
        {
            if (bitmap.Width <= Width && bitmap.Height <= Height)
            {
                bitmap.Save(Filename, ImageFormat.Jpeg);
                lSaved = true;
            }
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            bitmap.Dispose();
        }
        if (!lSaved)
        {
            Bitmap FinalBitmap = null;
            // Making Thumb
            try
            {
                bitmap = new Bitmap(imagePath);
                int BitmapNewWidth;
                decimal Ratio;
                int BitmapNewHeight;
                // Change size of image
                Ratio = (decimal)Width / Height;
                BitmapNewWidth = Width;
                BitmapNewHeight = Height;
                // Image processing
                FinalBitmap = new Bitmap(BitmapNewWidth, BitmapNewHeight);
                Graphics graphics = Graphics.FromImage(FinalBitmap);
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.FillRectangle(Brushes.White, 0, 0, BitmapNewWidth, BitmapNewHeight);
                graphics.DrawImage(bitmap, 0, 0, BitmapNewWidth, BitmapNewHeight);
                // Save modified image
                FinalBitmap.Save(Filename, ImageFormat.Jpeg);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                if (FinalBitmap != null) FinalBitmap.Dispose();
            }
        }
    }