Java ImageIO可更改为读取InputStream到BuffereImage

Java ImageIO可更改为读取InputStream到BuffereImage,java,image,javax.imageio,Java,Image,Javax.imageio,我有一个用Java编写的SpringMVCwebapp,你也可以上传图片。这些图像需要处理(调整大小、裁剪等),我使用Scalr库来实现这一点,这需要从BuffereImage读取图像 在Java中,您可以非常轻松地将InputStream(图像就是如何进入的)转换为BuffereImage: final BufferedImage img = ImageIO.read(in); 然而,ImageIO对图像格式非常挑剔,如果图像不正确,就会抛出各种异常。用户可以将几乎任何质量的图像上传到web

我有一个用Java编写的SpringMVCwebapp,你也可以上传图片。这些图像需要处理(调整大小、裁剪等),我使用Scalr库来实现这一点,这需要从BuffereImage读取图像

在Java中,您可以非常轻松地将InputStream(图像就是如何进入的)转换为BuffereImage:

final BufferedImage img = ImageIO.read(in);
然而,ImageIO对图像格式非常挑剔,如果图像不正确,就会抛出各种异常。用户可以将几乎任何质量的图像上传到web应用程序,因此这是不可接受的

所以我在寻找另一种选择。我在谷歌上搜索了一下,其中一个建议是来自Oracle的Java高级图像。唯一的问题是,它似乎依赖于Oracle Java实现,而我没有使用它


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

我想说,现在还不要更改代码

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

我已经为编写了几个插件(特别是,它包括一个支持CMYK颜色空间的
JPEGImageReader

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

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

我肯定也有商业插件可用,但我还没有研究过

如果您真的想更改库,请看一看ApacheCommonsImaging。它有一个非常好的API,支持多种格式。图像被读入
buffereImage
s,但是,它目前还不是很成熟,所以它很可能不会读取您的图像

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


同样,可能有完整的商业库替代方案,无论是Java还是基于本机代码。

我要说的是,现在还不要更改代码

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

我已经为编写了几个插件(特别是,它包括一个支持CMYK颜色空间的
JPEGImageReader

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

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

我肯定也有商业插件可用,但我还没有研究过

如果您真的想更改库,请看一看ApacheCommonsImaging。它有一个非常好的API,支持多种格式。图像被读入
buffereImage
s,但是,它目前还不是很成熟,所以它很可能不会读取您的图像

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


同样,可能有完整的商业库替代方案,无论是Java还是基于本机代码。

我要说的是,现在还不要更改代码

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

我已经为编写了几个插件(特别是,它包括一个支持CMYK颜色空间的
JPEGImageReader

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

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

我肯定也有商业插件可用,但我还没有研究过

如果您真的想更改库,请看一看ApacheCommonsImaging。它有一个非常好的API,支持多种格式。图像被读入
buffereImage
s,但是,它目前还不是很成熟,所以它很可能不会读取您的图像

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


同样,可能有完整的商业库替代方案,无论是Java还是基于本机代码。

我要说的是,现在还不要更改代码

ImageIO库的优点是它完全基于插件。如果没有读到,请不要读