【问题标题】:Is Image Resizing with GraphicsMagick with Java Really So Slow?使用 Java 的 GraphicsMagick 调整图像大小真的这么慢吗?
【发布时间】:2013-10-06 06:11:01
【问题描述】:

我需要根据需要调整一些图像的大小(以及锐化和旋转)以创建各种分辨率。我有一台小型开发计算机(Ivy Celeron @ 2.6GHz)。我的小测试图片采用了一张可爱的小猫图片的 64 兆像素(分辨率)和 4 兆像素版本,并将两个版本都缩小到 750 x 400(目标尺寸)。

一个版本使用JavaIO + ImgScalr,另一个使用Graphics Magick + im4java

4 兆像素版本使用原生 JavaIO + scalr 每张图片需要 270 毫秒,而使用 GraphicsMagick 需要 360 毫秒。 一张 64 兆像素的图片使用 JavaIO + scalr 需要 3100 毫秒来调整大小,而使用 GraphicsMagick 需要 4300 毫秒。

我在这里错过了什么吗?大部分时间都花在打开和读取文件并保存结果上,但使用 GraphicsMagick 的缩放速度要慢得多。我知道这些与一些更高级算法的用户有关,但最终结果在两个版本中看起来都非常好,而且我没想到我的 2013 电脑每秒不能处理至少 1000 张图像,但几乎没有每秒 3 到 0.3 张图片。

那么问题来了,我做错了什么?您调整图像大小的措施是什么?我真的需要一个完整的服务器来处理每秒 10 张图片吗?

** 更新**:

做一些数学运算:64M / 3seconds = 20M/sec / 2.6GHz = 10Mio/GHz = 1pixel/100 Clock-Cycles。所以它看起来几乎没问题。对于 4M,我们有:3M /.3sec = 9M/sec = 1pix/200 个周期。

所以这里有一个更新的问题:是否有一种格式可能会为了快速加载图像而牺牲内存?最好的方法是加载原始/位图可能需要一秒钟,因为 SSD 很慢(64M*3 = 192MB,4M*3=12MB)。但中间有什么东西吗?我怀疑使用质量较差的 JPeg 是否可行,因为它似乎不会加速解压缩。

也许是带有分离颜色通道的压缩位图? (不要笑!:-))。也许还有一些。 ZIP 有多快?

另外一个想法是提供多个分辨率(一次惩罚)并使用最接近的可用分辨率版本。 1M 分辨率在内存中将是 4M,并且应该导致每秒 12 次图片转换 (argh)。我准备好看到至少 1000/秒,但在过去的 10 年里,计算机电源接缝的飞跃不会那么大。我将尝试使用两个或更多工作线程并行启动它。让我们看看这是否会加倍。

【问题讨论】:

  • “我的小测试照片采用 64 兆像素..” 抱歉,什么?!?您认为 8000x8000 像素的图像“小”吗? BIG 到底是什么?
  • 毫无疑问,64M 很大。 GM 运行一个单独的进程,因此启动/关闭可能会引入一些开销,这些开销可以通过使用 gm4java (kennethxu.blogspot.com/2013/04/…) 来消除。 1000/s 对于你的大图像的小 PC 是不可能的,看我在那里的大服务器和小图像的测试。使用 GM,使用 size 参数会在性能上产生很大差异,还需要考虑缩放而不是调整大小。例如gm convert -size 1500x800 source.jpg -scale 750x400 target.jpg
  • 肯尼斯,感谢您的提示。我将在下周内对此进行调查。非常感谢!

标签: java image-processing image-resizing


【解决方案1】:

64 兆像素的图像相当大。如果任何 PC 可以调整其中的 1K / 秒,甚至 10 / 秒,我会感到惊讶

您可以查看此答案以了解可能更高效的方式 (https://stackoverflow.com/a/8365035/234901)。但请注意,图像质量和处理时间需要权衡取舍。

【讨论】:

  • 正如我所说,一张 64M 的图片需要我的小电脑 3 秒。我知道这是 500MB 的数据,但考虑一下 SSD
【解决方案2】:

这里看起来没什么问题。我选择了 ImgScalr 库并使用 ImageIO。产生最快的结果。此外,我使用的 jpeg 质量为 97%,并且经过重新压缩(更改大小后)。 64M JPEG 的文件大小为 5.8MB,加载速度很慢(1.5 秒),但在以默认质量保存后,我在 0.5 秒内加载了 1.8MB 的文件。这使它更实用。

该软件现在可以自动缩放大约 50 张个人资料图片和 260 张缩略图。这已经足够快了,因为它只有在没有结果副本存储在 CDN 中时才会扩展。所以一切又好了。

我真的很震惊,我以为每秒 1k,但最终有大约 50 个,而在服务器上大约 200 个(估计)是可以的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2011-08-31
    • 2013-07-18
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多