Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
如何在ASP.NET应用程序中高效地缩放和裁剪图像?_Asp.net_Image - Fatal编程技术网

如何在ASP.NET应用程序中高效地缩放和裁剪图像?

如何在ASP.NET应用程序中高效地缩放和裁剪图像?,asp.net,image,Asp.net,Image,我们的ASP.NET应用程序存在问题,该应用程序允许用户上载和裁剪图像。之后,图像都会缩放到固定大小。当处理一个大文件时,我们基本上会耗尽内存;似乎JPEG的处理效率相当低——我们使用的是System.Drawing.BitMap。您是否有一些一般性的建议,或者一些关于更有效的图像处理库的建议?您有哪些经验?您可能有堆栈跟踪需要查看吗 我还做了一些图像编辑后,用户上传了一个图像。我遇到的唯一问题是浏览器上文件上传大小的限制和超时。但与.Net的库无关 有些别的事情要考虑。如果您正在处理多个图像或

我们的ASP.NET应用程序存在问题,该应用程序允许用户上载和裁剪图像。之后,图像都会缩放到固定大小。当处理一个大文件时,我们基本上会耗尽内存;似乎JPEG的处理效率相当低——我们使用的是System.Drawing.BitMap。您是否有一些一般性的建议,或者一些关于更有效的图像处理库的建议?您有哪些经验?

您可能有堆栈跟踪需要查看吗

我还做了一些图像编辑后,用户上传了一个图像。我遇到的唯一问题是浏览器上文件上传大小的限制和超时。但与.Net的库无关


有些别的事情要考虑。如果您正在处理多个图像或在某个位置有一些危险的循环,那么您是否确保刷新()和处置()对象。

我也遇到了同样的问题,解决方法是使用System.Drawing.Graphics进行转换,并在处理完每个位图对象后立即处置它。以下是我的库中的一个示例(调整大小):


我突然想到了几个想法-

  • 您允许多大尺寸的图像 你的用户可以上传,你可以吗 对此加以限制?

  • 当您使用
    System.Drawing.Bitmap
    class,是吗 记得把它处理掉 正确地我们发现
    系统的主要原因之一。在我们的共享托管平台上,OutOfMemoryException
    异常是用户没有正确处理
    位图
    对象


  • Kev

    在.net中有一个旧的bug,所有图像默认为每像素32位-在这个大小下,您可以很快耗尽内存。请使用PixelFormat结构以确保您的问题不会出现这种情况

    此链接可能会有所帮助:

    我找到了它,它非常棒。和良好的API。效果很好。 从Visual studio 2010扩展管理器下载:

    在VS-2010中下载API的简单步骤:

    1) 。安装扩展。



    3). 查找并安装ImageResizing


    4) 。然后编码:(我在这里使用裁剪。您可以使用任何)有关imageresizing.net的文档


    试试看!!!它非常简单易用。谢谢。

    我做的图像裁剪和缩放与此类似。关键的一点是将代码放在“using”语句中,一旦您离开using块的分数,它就会自动处理资源。否则,您将无法处理图像数据==浪费内存。+1用于处理。我看到我们的客户总是忘记/不知道该怎么做。不过,你应该检查一下你的代码-这可能不是你遇到的唯一一个。我建议使用库-它可以正确处理内存使用,并使您从手动操作中解脱出来,这也是MS警告ASP.NET应用程序中不要使用System.Drawing的原因。的可能重复
        public Bitmap ApplyTo(Bitmap bitmap)
        {
            using (bitmap)
            {
                Bitmap newBitmap = new Bitmap(bitmap, CalculateNewSize(bitmap));
    
                using (Graphics graphics = Graphics.FromImage(newBitmap))
                {
                    graphics.SmoothingMode =
                        SmoothingMode.None;
                    graphics.InterpolationMode =
                        InterpolationMode.HighQualityBicubic;
                    graphics.CompositingQuality =
                        CompositingQuality.HighQuality;
    
                    graphics.DrawImage(
                        bitmap,
                        new Rectangle(0, 0, newBitmap.Width, newBitmap.Height));
                }
    
                return newBitmap;
            }
        }
    
    string uploadFolder = Server.MapPath(Request.ApplicationPath + "images/");
    FileUpload1.SaveAs(uploadFolder + FileUpload1.FileName);
    
    
    //The resizing settings can specify any of 30 commands.. See http://imageresizing.net for details.
    ResizeSettings resizeCropSettings = new ResizeSettings("width=200&height=200&format=jpg&crop=auto");
    
    //Generate a filename (GUIDs are safest).
    string fileName = Path.Combine(uploadFolder, System.Guid.NewGuid().ToString());
    
    //Let the image builder add the correct extension based on the output file type (which may differ).
    fileName = ImageBuilder.Current.Build(uploadFolder + FileUpload1.FileName, fileName, resizeCropSettings, false, true);