繁体   English   中英

ImageIO交替读取InputStream到BufferedImage

[英]ImageIO Alternitive to read for InputStream to BufferedImage

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

在Java中,您可以轻松地将InputStream(图像的输入方式)转换为BufferedImage:

final BufferedImage img = ImageIO.read(in);

但是,ImageIO确实对图像格式有些执着,如果图像不正确,则会抛出各种异常。 用户几乎可以将任何质量的图像上传到Web应用程序,因此这是不可接受的。

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

我可以使用另一个图书馆吗?

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

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

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

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

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

我敢肯定也有商业插件可用,但是我还没有研究它们。

如果您真的想更改库,请查看Apache Commons Imaging。 它具有非常好的API,并支持多种格式。 图像被读入BufferedImage 但是, 它们的JPEG支持目前还不是很成熟,因此很可能无法读取您的图像。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM