ImageIO не работает на Ubuntu

У меня есть следующий код Java, который записывает изображение в массив байтов, а затем обратно в изображение:

BufferedImage bi = ImageIO.read(new File("1.png"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi,"png",baos);
byte[] img = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(img);
BufferedImage bif = ImageIO.read(bais);

В OS X это прекрасно работает, но в Ubuntu bif (конечное изображение) становится нулевым в конце, что означает проблему чтения из ByteArrayInputStream. Я использую oracle jdk в обоих случаях и не знаю, что происходит.

Изменить: еще одно свидетельство того, что я схожу с ума: я напечатал массив байтов img в файл, используя FileOutputStream в Ubuntu и OSX, затем сравнил два файла, и они абсолютно одинаковы. Это означает, что либо ByteArrayInputStream отличается, либо (что более вероятно) второй ImageIO.read по какой-то причине не работает.


person codersarepeople    schedule 18.07.2013    source источник
comment
Любой тип Exception брошен?   -  person Uwe Plonus    schedule 18.07.2013
comment
Нет, bif просто нулевой в конце.   -  person codersarepeople    schedule 18.07.2013
comment
Что-то полезное в байтовом массиве img? Он может быть пустым или недопустимым PNG (возможно, из-за какой-то проблемы с кодеком). Вы должны вывести массив и, возможно, также опубликовать его (или, по крайней мере, первые байты, чтобы идентифицировать PNG-заголовок).   -  person Mnementh    schedule 18.07.2013
comment
Хорошая точка зрения. Я только что преобразовал вывод img в файл как в OS X, так и в Ubuntu, и хотя оба они определенно являются PNG, файлы действительно несколько отличаются ... они двоичные, поэтому трудно сказать, но их относительные размеры - 484649 ( osx) и 374978 (убунту)   -  person codersarepeople    schedule 18.07.2013
comment
Это рабочий стол Ubuntu или сервер Ubuntu?   -  person cjstehno    schedule 18.07.2013
comment
Я думаю, это сервер Ubuntu.   -  person codersarepeople    schedule 18.07.2013
comment
@codersarepeople: Интересная разница, но оба размера достаточно велики для действительных PNG. Я подумал, что, может быть, где-то было написано что-то неверное. Но если заголовок выглядит нормально, а содержимое есть, я понятия не имею, почему новое буферизованное значение равно нулю.   -  person Mnementh    schedule 18.07.2013
comment
Хорошо, я туплю. Я случайно использовал разные изображения. Теперь, когда я различаю, два массива байтов img абсолютно одинаковы. Итак, очевидно, проблема в файле ImageIO.read. Извини за это.   -  person codersarepeople    schedule 18.07.2013


Ответы (1)


Сервер Ubuntu обычно работает в автономном режиме, что может вызвать проблемы с манипулированием изображениями Java.

http://www.oracle.com/technetwork/articles/javase/headless-136834.html

Попробуйте настроить параметры запуска jvm, чтобы разрешить работу без головы, и это должно исправить это.

person cjstehno    schedule 18.07.2013
comment
Красивый! Огромное спасибо - person codersarepeople; 18.07.2013
comment
Я был укушен этим раньше, рад помочь. - person cjstehno; 18.07.2013