.NET 中最快的图像大小调整

发布于 2024-07-29 06:06:10 字数 1542 浏览 6 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

不交电费瞎发啥光 2024-08-05 06:06:10

我推荐 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

I recommend ImageResizer:

Key features are:

  • RESTful url-based image API (example: src="img.jpg?w=170")
  • Intuitively crop, resize, rotate, flip, constrain, and encode
  • Render PDFs into images
  • 19 free plugins cover most common tasks
  • Disk + Memory input/output caching
  • 8-bit PNG/GIF & animated GIF processing
  • Flexible text & image overlay support
  • Image filtering suite (needs licence)
  • High performance
  • and more ....

For installing with Nuget:

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

For more information please check:
http://imageresizing.net/docs/install/nuget

短叹 2024-08-05 06:06:10

有很多文章展示了这方面的基础知识。 我使用了 Atalasoft 的组件,发现它们的质量非常好。 调整 JPEG 图像大小和使用 JPEG 图像存在细微差别。

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

获得良好性能的一种解决方案是将需要转换的传入文件排队。 添加更多机器来处理队列中更多消息,或者优化服务代码以获得更好的吞吐量。 如果设计正确的话,处理大量用户实际上并不困难。

There are a lot of articles out there showing the basics of this. I've used the components from Atalasoft and found them to be of pretty good quality. There are nuances to resizing and working with JPEG images.

You seem to be really concerned with performance but you don't really give enough information to help us suggest good optimizations for you. Whatever you are doing, you need to do a full performance analysis and understand what is running slow. In some cases slowish, but maintainable image processing code may be OK if other things are optimized.

One solution for good performance is to queue incoming files that need to be converted. Add more machines to handle more messages in the queue, or optimize the service code to get better throughput. It's really not that difficult to handle a large number of users if you get the design right.

眼泪也成诗 2024-08-05 06:06:10

这是 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 类

Here is winforms way

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 ;
}

and here is WPF way TransformedBitmap Class

少跟Wǒ拽 2024-08-05 06:06:10

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

If money is no object, LeadTools is the traditional "go to" library for image processing. That being said, my first inclination would be to code it up using stock .NET GDI+ calls and then do some testing. It is likely this solution would be performant enough, but if not, you'll have a baseline from which you can compare other libraries and solutions. Anything involving spawning a command line tool will entail creating a separate process for each image, which could negate the benefit of going to unmanaged code.

心安伴我暖 2024-08-05 06:06:10

我不确定性能,但开源 OpenCV 是一个选择。

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

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

I'm not sure about performance, but the open source OpenCV is an option.

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

The function cvResize resizes image I so that it fits exactly to J. If ROI is set, the function consideres the ROI as supported as usual. the source image using the specified structuring element B that determines the shape of a pixel neighborhood over which the minimum is taken:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文