1

次の 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 (最終イメージ) が最後に null になります。これは、ByteArrayInputStream からの読み取りに問題があることを意味します。どちらの場合も oracle jdk を使用していますが、何が起こっているのかわかりません。

編集:私が狂っているというより多くの証拠:UbuntuとOSXでFileOutputStreamを使用してimgバイト配列をファイルに出力し、2つのファイルを比較しましたが、それらはまったく同じです。これは、ByteArrayInputStream が異なるか、(より可能性が高い) 2 番目の ImageIO.read が何らかの理由で機能していないことを意味します。

4

1 に答える 1

2

Ubuntu サーバーは通常ヘッドレス モードで実行されているため、Java イメージの操作で問題が発生する可能性があります。

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

ヘッドレスで実行できるように jvm の起動設定を微調整してみてください。修正されるはずです。

于 2013-07-18T15:35:51.757 に答える