相关疑难解决方法(0)

用于检测CMYK图像的JAI ImageIO的纯Java替代品

首先,我想解释导致问题的情况/要求:

在我们的Web应用程序中,我们无法支持CMYK图像(JPEG),因为IE 8及以下版本无法显示它们.因此,我们需要检测何时有人想要上传这样的图像并拒绝它.

不幸的是,Java的ImageIO不会读取这些图像,也不会使我无法获得检测到的色彩空间.从调试开始,JPEGImageReader内部似乎得到了颜色空间代码11(这意味着JCS_YCCK),但我无法安全地访问该信息.

当查询读者的图像类型时,我没有得到任何CMYK,所以我可能会假设no image types = unsupported image.

我使用成像工具将源CMYK图像转换为RGB,以便测试它是否可读(我在尝试获取"无CMYK支持"消息时尝试模拟管理员的步骤).但是,JPEGImageReader不会读取该图像,因为它假定(在源中注释!)3分量RGB颜色空间,但图像标题报告4个组件(可能是RGBA或ARGB),因此IllegalArgumentException抛出了一个.

因此,ImageIO不是一个选项,因为我无法可靠地获取图像的色彩空间,我无法告诉管理员为什么不能接受由于某些内部的精细图像(它可以由浏览器显示)错误.

这让我尝试了JAI ImageIO,它CLibJPEGImageReader做得非常出色并正确读取了我所有的测试图像.

但是,由于我们将应用程序部署在可能托管其他应用程序的JBoss中,因此我们希望尽可能保持它们的隔离.据我所知,我需要JAI ImageIO的安装到JRE或以其他方式使本机库提供,以使用它们,因此,其他应用程序可能访问到它们为好,这可能会导致副作用(至少我们不得不测试很多,以确保不是这种情况).

这就是问题的解释,这里再次出现: JAI ImageIO是否有任何纯Java替代品可以可靠地检测并可能转换CMYK图像?

提前致谢,

托马斯

java cmyk jai javax.imageio

13
推荐指数
2
解决办法
2万
查看次数

用Java读取JPEG

我正在尝试将JPEG转换为,BufferedImage以显示在上JPanel。但是,javax.imageio.ImageIO.read()对于它处理的JPEG似乎很挑剔,经常抛出IIOException。几乎所有要命名的图像阅读器都可以正常打开相同的JPEG。

我看过Apache的SanselanJAI。但是Sanselan无法处理JPEG,并且JAI不适用于64位Windows平台,并且似乎没有得到维护(最新更新是2006年)。关于StackOverflow的先前答案建议 com.sun.image.codec.jpeg.JPEGCodec,但是在Java 5中已弃用,在7中已消失。

这些是我唯一的选择吗?真的没有Java库能够将JPEG可靠地读取到BufferedImage吗?

java jpeg javax.imageio

5
推荐指数
1
解决办法
1800
查看次数

标签 统计

java ×2

javax.imageio ×2

cmyk ×1

jai ×1

jpeg ×1