我有以下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而且不知道发生了什么。
编辑:更多证据表明我疯了:我在Ubuntu和OSX上使用FileOutputStream将img字节数组打印到文件中,然后将两个文件区分开来,它们完全相同。这意味着ByteArrayInputStream不同或者(更有可能)第二个ImageIO.read由于某种原因不起作用。
答案 0 :(得分:2)
Ubuntu服务器通常以无头模式运行,这会导致java图像操作出现问题。
http://www.oracle.com/technetwork/articles/javase/headless-136834.html
尝试调整你的jvm启动设置以允许无头运行,它应该修复它。