2010-12-14 38 views
2

我的Java J2SE應用程序正在從網上閱讀大量(png)圖像,其中一些應用程序使用Sun's/Oracle的PNGImageReader(真彩色圖像)的透明色(tRNS部分)實施簡單地忽略。用於加載PNG圖像的替代品庫

因此,通過ImageIO.read(...);加載的常見解決方案對我無效,因爲它依賴於此不完整的PNGImageReader實現。

有沒有人知道一個PNG閱讀器的實現,可以正確讀取所有形式的PNG圖像 - 那些與顏色表或真正的顏色和alpha透明度或透明的顏色?

因爲它是一個GPL項目,它應該是一個非商業性的應用程序,可以不包含許可問題。

編輯:我是這個問題太具體。因此,讓我們重新設計我的問題:

誰知道可以加載PNG文件的替代實現和庫?

然後,我將測試它們的實現以加載一些test png images的功能。

EDIT2:最終結果必須是一個BufferedImage

回答

3

最後我發現這符合我的需要合適的PNG讀者:

​​

主要特點:

  • 開源(LGPL)
  • 負載PNG正確包括α- 透明度和透明顏色
  • 返回BufferedImage
  • 對其他 庫
  • 具有非常小的尺寸(整個庫爲46KB)。
1

使用以下方法來獲取圖像:

Toolkit.getDefaultToolkit().getImage(theFilenameOfTheImage) 

編輯: 如果你需要一個BufferedImage,你可以使用如下:

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

它基本上加載圖像同樣的方式,但ImageIcon類正在使用MediaTracker來確保圖像完全加載。這樣,您可以訪問生成的BufferedImage,並且它將始終包含像素圖。

+0

首先,我認爲這不能工作,因爲它會在內部使用相同的圖像閱讀器。有趣的是,這真的工作 - 透明度正確加載,但返回的圖像是一個sun.awt.image.ToolkitImage,但我需要一個java.awt.image.BufferedImage。創建一個新的BufferedImage並在其上繪製ToolkitImage的常用方法不能用於未知原因(無例外)。 – Robert 2010-12-15 18:40:47

1

你試過Apache Commons Imaging庫嗎? PNG支持指定爲:

通過版本1.2/ISO/IEC 標準(15948:2003)支持。控制 寫入時的確切格式爲 不完整。

作爲一個純Java庫,它應該在J2SE上運行良好。

+0

鏈接已死。我相信這是正確的當前網址:http://commons.apache.org/proper/commons-imaging/ – 2014-01-29 21:39:54

+1

更新,謝謝! – 2014-01-29 21:44:54