【问题标题】:Byte array to some sort of Java/Scala image. Performance considerations字节数组到某种 Java/Scala 图像。性能注意事项
【发布时间】:2015-07-23 00:47:02
【问题描述】:

我正在编写一个接收图像然后调整大小并上传它们的 FTP 服务器。

我目前的流程(伪代码)如下:

val imagesAsBytes: Array[Byte] = ...
val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes))
uploadImage(bufferedImage)

这就是它的要点。我省略了调整大小,因为它不重要。本质上,我使用ImageIO 模块将Array[Byte] 序列化为BufferedImage,然后调整其大小。

我做了一些分析,我注意到使用ImageIO 创建BufferedImage 非常慢。

如果我只上传 Array[Byte],我可以实现大约 4 倍的吞吐量,而不是我实际尝试将其转换为 BufferedImage。我不能只上传Array[Byte] 的原因是我确实需要调整图像大小。我没有绑定BufferedImage,这只是我的第一次尝试。

有谁知道我可以用来加快速度的一些想法吗?我应该在BufferedImage 上使用更好的格式吗?

我已经考虑过将调整大小推送到单独的微服务并异步执行,但这不是第一个版本的选项。

编辑:我已经查看了this 问题,并且知道这一点:ImageIO.setUseCache(false)

【问题讨论】:

  • 根据您的数字,我不认为解码图像,重新采样(调整大小),最后再次编码可以被认为是慢(4x)。实际上,与仅复制字节相比,它的速度惊人地快……还是仅与解码相比?无论如何,您使用的是什么文件格式?有些格式比其他格式更难编码/解码。

标签: java image scala


【解决方案1】:

我建议查看更积极支持的库(2020 年 2 月的最新版本 4.0),例如 scrimage。在引擎盖下它使用java.awt.*。至少在出现任何问题的情况下,您将能够解决它们并解决它们,此外还可以使用更“规模化”的 API。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    使用 ImageMagic 的外部程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多