用于加载PNG图像的替代库

时间:2010-12-14 19:26:37

标签: java png transparency loading

我的java J2SE应用程序正在从Web上读取大量(png)图像,其中一些使用的功能,例如真实颜色图像的透明度颜色(tRNS部分),Sun的/ Oracle的PNGImageReader实现只是忽略了。

因此,通过ImageIO.read(...);加载的常见解决方案对我不起作用,因为它依赖于这个不完整的PNGImageReader实现。

有没有人知道可以正确读取所有形式的PNG图像的png阅读器实现 - 具有颜色表或真彩色和alpha透明度或透明颜色的那些?

与GPL项目一样,它应该是一个非商业性项目,可以在应用程序中包含许可问题而无法使用。

编辑:我的这个问题太具体了。因此,让我重新设计我的问题:

谁知道能够加载PNG文件的替代实现和库?

然后,我将测试其实现的功能,以加载一些test png images

Edit2:最终结果必须是BufferedImage

3 个答案:

答案 0 :(得分:3)

最后,我找到了一个合适的PNG阅读器,完全符合我的需求:

Sixlegs Java PNG Decoder

主要特点:

  • 开源(LGPL)
  • 正确加载PNG,包括alpha 透明度和透明色
  • 返回BufferedImage
  • 与其他人没有进一步的依赖关系 库
  • 尺寸非常小(整个图书馆为46KB)。

答案 1 :(得分:2)

您是否尝试过Apache Commons Imaging库? PNG支持指定为:

  

通过版本1.2 / ISO / IEC支持   标准(15948:2003)。控制   写作的确切格式是   不完整的。

作为纯Java库,它应该在J2SE上运行良好。

答案 2 :(得分:1)

使用以下方法获取图像:

Toolkit.getDefaultToolkit().getImage(theFilenameOfTheImage)

修改 如果需要BufferedImage,可以使用以下命令:

ImageIcon iic=new ImageIcon(theFilenameOfTheImage);
BufferedImage bimg=((ToolkitImage)iic.getImage()).getBufferedImage();

它基本上以相同的方式加载图像,但ImageIcon类使用MediaTracker来确保图像完全加载。这样,您可以访问生成的BufferedImage,它将始终包含像素图。