【问题标题】:Fastest Image Resizing in .NET [closed].NET 中最快的图像大小调整 [关闭]
【发布时间】:2010-11-14 18:27:14
【问题描述】:

我需要最快的库来将完整尺寸的图像(有些高达 9MB)调整为多种尺寸

场景如下:

  • 用户上传照片
  • FileSystemWatcher 在监视放置位置的服务中运行(在 SAN 上)
  • 当出现新照片时,该服务将创建 4 个完整 JPEG 质量的图像版本:
    • 100 像素宽
    • 320 像素宽
    • 640 像素宽
    • 1280 宽

如果库是 C/C++ 或其他任何东西,我不会大惊小怪,只要我可以通过 .NET 使用它就很酷。

此外,这将需要扩展到可能有 1,000 个活跃用户。

让我知道你的想法:)

【问题讨论】:

  • 我只会在极其糟糕的情况下使用 FileSystemWatcher。如果您正在上传或复制文件,请写入消息队列,调用服务方法,其他操作,而不是等待 FSW 获取它。
  • 你找到比 Graphics 更快的东西了吗?我在这里遇到同样的问题。 stackoverflow.com/questions/16988078/…

标签: c# .net image image-processing resize


【解决方案1】:

这里是winforms方式

public Image ResizeImage( Image img, int width, int height )
{
    Bitmap b = new Bitmap( width, height ) ;
    using(Graphics g = Graphics.FromImage( (Image ) b ))
    {       
         g.DrawImage( img, 0, 0, width, height ) ;
    }

    return (Image ) b ;
}

这是 WPF 方式TransformedBitmap Class

【讨论】:

  • Graphics 对象可能应该使用 using 而不是显式调用 Dispose 来包装。
  • 你是对的,我编辑了帖子
  • 不,它和 PictureBox 缩放 SizeMode 一样慢。我正在寻找一种更快的方法;我的测试应用:stackoverflow.com/questions/16988078/…
  • @Turnor 为什么?因为蝴蝶效应,还是因为你这么说?
  • @KennethK。因为即使抛出异常它也会调用 Dispose。
【解决方案2】:

如果钱不是问题,LeadTools 是用于图像处理的传统“首选”库。话虽如此,我的第一个倾向是使用股票 .NET GDI+ 调用对其进行编码,然后进行一些测试。这个解决方案很可能足够高效,但如果没有,您将拥有一个基准,您可以从中比较其他库和解决方案。任何涉及生成命令行工具的事情都需要为每个图像创建一个单独的进程,这可能会抵消使用非托管代码的好处。

【讨论】:

    【解决方案3】:

    有很多文章显示basics of this。我使用了来自Atalasoft 的组件,发现它们的质量非常好。调整大小和使用 JPEG 图像存在细微差别。

    您似乎真的很关心性能,但您并没有真正提供足够的信息来帮助我们为您提出好的优化建议。无论您在做什么,都需要进行全面的性能分析并了解运行缓慢的原因。在某些情况下速度较慢,但​​如果其他方面得到优化,则可维护的图像处理代码可能没问题。

    获得良好性能的一个解决方案是将需要转换的传入文件排队。添加更多机器来处理队列中的更多消息,或者优化服务代码以获得更好的吞吐量。如果设计得当,处理大量用户真的没那么难。

    【讨论】:

      【解决方案4】:

      我不确定性能,但open source OpenCV 是一个选项。

      void cvResize(const CvArr* I, CvArr* J, int interpolation=CV_INTER_LINEAR);

      函数 cvResize 调整图像 I 的大小,使其完全适合 J。如果设置了 ROI,该函数会像往常一样将 ROI 视为支持。使用指定结构元素 B 的源图像,该结构元素确定取最小值的像素邻域的形状:

      【讨论】:

        【解决方案5】:

        我推荐ImageResizer

        主要特点是:

        • RESTful 基于 url 的图像 API(例如:src="img.jpg?w=170")
        • 直观地裁剪、调整大小、旋转、翻转、约束和编码
        • 将 PDF 渲染为图像
        • 19 个免费插件涵盖最常见的任务
        • 磁盘 + 内存输入/输出缓存
        • 8 位 PNG/GIF 和动画 GIF 处理
        • 灵活的文本和图像叠加支持
        • 图像过滤套件(需要许可证)
        • 高性能
        • 还有更多......

        使用 Nuget 安装:

        PM> Install-Package ImageResizer.MvcWebConfig
        PM> Install-Package ImageResizer.Plugins.DiskCache
        PM> Install-Package ImageResizer.Plugins.PrettyGifs
        

        更多信息请查看: http://imageresizing.net/docs/install/nuget

        【讨论】:

        • 一个使用 ImageResizer.NET 的注释。您在此处列出的 DiskCache 插件是性能包的一部分,如果您在没有付费许可证的情况下安装它(这非常昂贵),它将在角落呈现一个小点
        猜你喜欢
        • 2010-10-26
        • 2011-10-04
        • 2013-04-08
        • 1970-01-01
        • 2016-08-18
        • 2014-05-21
        • 2014-09-13
        • 2010-12-10
        • 2010-11-03
        相关资源
        最近更新 更多