2010-12-14 1 views
2

Приложение java J2SE читает много изображений (png) из Интернета, а некоторые из них используют такие функции, как цвет прозрачности для изображений с истинным цветом (раздел tRNS), которые PNGImageReader от Sun/Oracle реализация просто игнорируется.Альтернативные библиотеки для загрузки изображений PNG

Поэтому общее решение для загрузки через ImageIO.read(...); не работает для меня, поскольку оно полагается на эту незавершенную реализацию PNGImageReader.

Кто-нибудь знает реализацию png-считывателя, которая может корректно считывать все формы изображений PNG - те, у которых есть таблица цветов, прозрачность или прозрачность?

Как и для проекта GPL, он должен быть некоммерческим, который может быть включен без проблем с лицензированием в приложение.

Редактировать: Мой вопрос будет слишком конкретным. Поэтому позвольте мне пересмотреть мой вопрос:

Кто знает альтернативные реализации и библиотеки, которые могут загружать файлы PNG?

Затем я проверю реализации на свои возможности для загрузки некоторых test png images.

Edit2: Конечный результат должен быть BufferedImage

ответ

3

Наконец я нашел подходящего читателя PNG, который соответствует моим потребностям отлично:

Sixlegs Java PNG Decoder

Основные особенности:

  • Open Source (LGPL)
  • Грузы PNG правильно включая альфа прозрачность и прозрачные цвета
  • Возвращает BufferedImage
  • Не имеет дополнительных зависимостей от других библиотек
  • Имеет очень маленький размер (46 КБ для всей библиотеки).
1

Используйте следующие приобрести изображение:

Toolkit.getDefaultToolkit().getImage(theFilenameOfTheImage) 

Edit: Если вам нужен BufferedImage, вы можете использовать следующие:

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

В основном загружает изображение аналогично, но класс ImageIcon использует MediaTracker, чтобы убедиться, что изображение полностью загружено. Таким образом, вы можете получить доступ к полученному BufferedImage, и он всегда будет содержать pixmap.

+0

Сначала я думал, что это не сработает, поскольку он будет использовать один и тот же считыватель изображений внутри. Смешно это действительно работает - прозрачность правильно загружена, но возвращенное изображение - sun.awt.image.ToolkitImage, но мне нужен java.awt.image.BufferedImage. Общий подход к созданию нового BufferedImage и привлечению ToolkitImage к нему не работает по неизвестной причине (без исключения). – Robert

1

Вы пробовали библиотеку Apache Commons Imaging? Поддержка PNG определяется как:

Поддерживается по стандарту 1.2/ISO/IEC (15948: 2003). Контроль точного формата при записи неполный.

Будучи чистой библиотекой Java, она должна хорошо работать на J2SE.

+0

Ссылка мертва. Я считаю, что это правильный текущий URL: http://commons.apache.org/proper/commons-imaging/ –

+1

Обновлено, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^