Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要一些lite库/代码来创建缩略图,并且最适合与ASP.NET MVC一起使用_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 需要一些lite库/代码来创建缩略图,并且最适合与ASP.NET MVC一起使用

C# 需要一些lite库/代码来创建缩略图,并且最适合与ASP.NET MVC一起使用,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,下面是从数据库返回图像的操作方法,我需要一些lite库或自己编写代码(如果很短),以便根据我的要求调整和压缩这些图像的大小“生成缩略图”,然后再将其传递到HTTP响应 编辑:事实上,考虑到这一点,也许最好将缩略图保存在其他列中,因此,现在我需要一种方法,在将图像保存到数据库之前压缩并调整图像大小,并保存一个未触及的副本。最初通过在HttpPostedFileBase中传递图像来保存图像,现在需要一些工具在保存到数据库之前调整图像大小并进行压缩 public FileContentResult G

下面是从数据库返回图像的操作方法,我需要一些lite库或自己编写代码(如果很短),以便根据我的要求调整和压缩这些图像的大小“生成缩略图”,然后再将其传递到HTTP响应

编辑:事实上,考虑到这一点,也许最好将缩略图保存在其他列中,因此,现在我需要一种方法,在将图像保存到数据库之前压缩并调整图像大小,并保存一个未触及的副本。最初通过在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.NET不支持将其用于

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


编辑:我刚注意到MVC标签。我不知道
System.Drawing
是否可用于MVC,或者它是否已被其他东西取代。一般来说,.NET一直都有内置的有用的图形库,可以轻松地完成大多数简单的事情(我不会说它只做简单的事情,正如
graphics.DrawImage(…)
方法的30个重载所证明的那样),所以我希望您仍然可以在MVC中这样做。

以下是我制作缩略图的例行程序:

    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();
            }
        }
    }
public void make缩略图(字符串imagePath)
{
//图像存在吗?
if(string.IsNullOrEmpty(imagePath))抛出新的FileNotFoundException(“图像在“+imagePath”处不存在);
//默认值
字符串文件名=imagePath.ToLower().Replace(“.jpg”,“_thumb.jpg”);
int Width=100;//180;
int Height=75;//135;
bool lSaved=假;
//加载图像
位图位图=新位图(图像路径);
//如果图像小于仅保存
尝试
{

如果(bitmap.Width不要重新发明轮子!有一个非常好的、免费的(事实上是开源的)纯.NET库,可用于API或处理程序:

它支持非常高质量的大小调整、转换成多种格式、自动裁剪、旋转、水印

如果你认为“不,我自己能行!”,以下是20个你不应该这么做的理由:


是的,我会这样做。但我仍然需要一些能够与ASP.NET一起工作的东西来调整图像大小/将图像压缩为缩略图,然后才能将它们保存到附加列中。最终用户是否通过您的网站上载原始图像?如果是,您不会希望在用户发起的调用中使用System.Drawing生成缩略图。如果images仅通过您控制的内部进程(系统)保存到db中。绘图可能对您很有用。