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 字节数组打印到一个文件中,然后对这两个文件进行了比较,它们完全相同。这意味着 ByteArrayInputStream 不同,或者(更有可能)第二个 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 回答