ASP.. NET上传后处理缩略图的最佳方法

本文关键字:略图 最佳 方法 后处理 NET ASP | 更新日期: 2023-09-27 18:13:29

我读过关于创建HttpHandler的文章,每次我想显示缩略图时调用它,它将为我执行大小调整。我也听说过一些其他的解决方案,但我想知道哪种解决方案对每个页面上到处都显示缩略图的社交网站来说是最好的。

在上传原始文件后,是否可以调整大小并将图像保存在磁盘上?引用这些图像的最佳方式是什么?

有谁能给我一些建议吗?谢谢你。

ASP.. NET上传后处理缩略图的最佳方法

是否可以调整大小并将图像保存在磁盘上是否上传了原始文件?什么是最好的参考方法这些图片吗?

当然,Twitter就是这样做的,例如,当需要显示缩略图时,大多数网站都是这样做的。这很耗时。您不希望每次在每个图像上执行此操作时用户无所事事。

将缩略图存储在磁盘上,并在数据库中保留对缩略图的引用。或者将它们存储在数据库本身。我不想讨论磁盘和数据库的区别,但不要每次都调整它们的大小。

这里是一些调整大小的代码,如果你需要它,首先你设置了一个最大高度和宽度,它创建了一个缩略图与原来的相同的纵横比,现在不违反max.

第二种,如果你知道最终图像的实际大小,并且不需要担心长宽比,则更简单。

    public Image Thumbnail(Image FullsizeImage, int MaxHeight, int MaxWidth)
    {
        try
        {
            // This has to be here or for some reason this resize code will
            // resize an internal Thumbnail and wil stretch it instead of shrinking
            // the fullsized image and give horrible results
            FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
            FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);

            System.Drawing.Image NewImage;

            if (!((MaxWidth < FullsizeImage.Width) || (MaxHeight < FullsizeImage.Height)))
                NewImage = FullsizeImage;
            else
            {
                float HeightRatio = 1;
                float WidthRatio = 1;
                HeightRatio = (float)FullsizeImage.Width / FullsizeImage.Height;
                WidthRatio = (float)FullsizeImage.Height / FullsizeImage.Width;

                float DrawHeight = (float)FullsizeImage.Height;
                float DrawWidth = (float)FullsizeImage.Width;
                if (MaxHeight < FullsizeImage.Height)
                {
                    DrawHeight = (float)MaxHeight;
                    DrawWidth = MaxHeight * HeightRatio;
                }
                if (MaxWidth < DrawWidth)
                {
                    DrawWidth = MaxWidth;
                    DrawHeight = DrawWidth * WidthRatio;
                }
                NewImage = FullsizeImage.GetThumbnailImage((int)(DrawWidth),
                       (int)(DrawHeight), null, IntPtr.Zero);
            }
            return NewImage;
            // To return a byte array for saving in a db 
            //ms = new MemoryStream();
            //NewImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            //NewImage.Dispose();
            //FullsizeImage.Dispose();
            //return ms.ToArray();
        }
        catch
        {
            return null;
        }
        finally
        {
        }
    }
    public Image Resize(Image OrigImage, int NewHeight, int NewWidth)
    {
        if (OrigImage != null)
        {                
            Bitmap bmp = new Bitmap(OrigImage, new Size(NewWidth, NewHeight));
            bmp.SetResolution(this.ImageResolution, this.ImageResolution);
            Graphics g = Graphics.FromImage(bmp);
            return bmp;
        }
        else
        {
            return null;
        }
    }