gpt4 book ai didi

java - ImageIO 将 InputStream 读取到 BufferedImage 的替代方案

转载 作者:行者123 更新时间:2023-12-01 22:43:25 27 4
gpt4 key购买 nike

我有一个用 Java 编写的 Spring MVC Web 应用程序,您也可以上传图像。这些图像需要进行操作(调整大小、裁剪等),为此我使用 Scalr 库,这需要从 BufferedImage 中读取图像。

在 Java 中,您可以非常轻松地从 InputStream(这就是图像的传入方式)转换为 BufferedImage:

final BufferedImage img = ImageIO.read(in);

但是,ImageIO 对图像格式非常挑剔,如果图像有问题,它会抛出各种异常。用户可以将几乎任何质量的图像上传到网络应用程序,因此这是 Not Acceptable 。

所以我正在寻找替代方案。我进行了一些谷歌搜索,其中一个建议是 Oracle 的 Java Advanced Imaging。唯一的问题是它似乎依赖于 Oracle Java 实现,而我没有使用它。

还有其他我可以使用的库吗?

最佳答案

我想说,暂时不要更改您的代码!

ImageIO 库的好处是它完全基于插件。如果它不能立即读取您需要的格式,您可以非常轻松地添加支持。

我为 TwelveMonkeys ImageIO project 编写了几个插件(特别是,它包括支持 CMYK 颜色空间的 JPEGImageReader)。

Werner Randelshofer 的 CMYKJPEGImageReader由 @MadProgrammer 链接是另一个您可以尝试的插件。

正如您所提到的,JAI 也有允许您读取 CMYK JPEG 的插件(我认为),但是许多插件需要 native 库和额外的安装,这在 Web 应用程序上下文中可能会很麻烦。该项目也已经多年没有更新了。

我确信也有可用的商业插件,但我还没有研究过这些。

如果您确实想更改库,请查看 Apache Commons Imaging。它有一个非常好的API,并且支持多种格式。图像被读入BufferedImage s。 Their JPEG support但是,目前还不是很成熟,因此它很可能不会读取您的图像。

JMagickim4java两者都使用 ImageMagick,它对多种格式都有很好的支持。需要 native IM 安装。然而,API 是基于文件的,这意味着您通常必须在处理之前将流写入临时文件。也不直接支持BufferedImage s,但您可以根据需要进行转换,并且在许多情况下您可以使用图像处理内置的 IM,而不是 Java。

同样,可能存在完整的商业库替代品,无论是 Java 还是基于 native 代码。

关于java - ImageIO 将 InputStream 读取到 BufferedImage 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25737623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com