2016-05-19 4 views
0

Я пытаюсь преобразовать изображение JPEG2000 (.jp2) в другие форматы (JPEG или PNG), поэтому я пытаюсь использовать метод записи javax.imageio. Это отлично подходит для других форматов (например, JPEG для PNG), но когда дело доходит до JPEG2000 (или TIFF), оно генерирует исключение. Может ли кто-нибудь сказать мне, каковы возможные форматы входного изображения?Использование ImageIO для преобразования из JPEG2000 в PNG

Exception in thread "main" java.lang.IllegalArgumentException: im == null! 
    at javax.imageio.ImageIO.write(ImageIO.java:1457) 
    at javax.imageio.ImageIO.write(ImageIO.java:1565) 
    at decodeincodeimages.AndroidInterface.convertFormat(AndroidInterface.java:199) 
    at Main_package.Execute.main(Execute.java:69) 

Java Result: 1 

И это метод:

public static boolean convertFormat(String inputImagePath, 
     String outputImagePath, String formatName) throws IOException { 
    FileInputStream inputStream = new FileInputStream(inputImagePath); 
    FileOutputStream outputStream = new FileOutputStream(outputImagePath); 

    // reads input image from file 
    BufferedImage inputImage = ImageIO.read(inputStream); 

    // writes to the output image in specified format 
    boolean result = ImageIO.write(inputImage, formatName, outputStream); 

    // needs to close the streams 
    outputStream.close(); 
    inputStream.close(); 

    return result; 
} 

И я называю это так:

System.out.println(AndroidInterface.convertFormat("g:\\picture.jp2","g:\\conv.gif", "gif")); 
+0

может быть, вы должны увидеть это сообщение https://blog.idrsolutions.com/2015/04/how-to -Чтение-JPEG2000-в-Java / –

ответ

2

ImageIO поставляется со следующими форматами встроенных в: BMP, GIF, JPEG, PNG , WBMP (источник: the API documentation). Если вы попытаетесь прочитать изображение в другом формате, методы ImageIO.read(...) просто вернут null, поэтому вы получите IllegalArgumentException: im == null позже в своем методе.

Однако ImageIO также использует механизм плагинов (интерфейс поставщика услуг или SPI), чтобы можно было установить дополнительные или сторонние плагины.

Чтобы иметь возможность читать JPEG2000 или TIFF, вам нужен такой плагин.

  • Для JPEG2000 лучшим вариантом является, вероятно, JAI. JAI также имеет плагин TIFF. JAI был разработан Sun (теперь Oracle), но, к сожалению, не было обновлений и исправлений ошибок в течение многих лет.

  • Есть также привязки Java для OpenJPEG, которые должны содержать плагин ImageIO для JPEG2000.

  • Для TIFF вы также можете использовать мой TwelveMonkeys ImageIO TIFF-плагин. В TwelveMonkeys нет плагина JPEG2000, поэтому он может оказаться менее полезным для вас.

(Этот список не является исчерпывающим, Google может помочь вам найти больше :-))

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