Java-将byte []保存到图像文件中

时间:2018-12-12 22:15:56

标签: java image bufferedimage javax.imageio

此帖子是对以下内容的跟踪: ImageIO.read can't read ByteArrayInputStream (image processing)

类似于OP,每当我尝试从ByteArrayInputStream读取时,我都会得到一个空指针(正如最佳答案所解释的那样)。注意到这一点,我已经实现了上面帖子中@haraldK的答案中的代码,以纠正此问题,但是我遇到了另一个问题。我有以下代码:

byte[] imageInByteArr = ...

// convert byte array back to BufferedImage
int width = 1085;
int height = 696;
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );

try {
    ImageIO.write(convertedGrayScale, "jpg", new File("C:\\test.jpg"));
}
catch (IOException e) {
    System.err.println("IOException: " + e);
}

执行后,我在try / catch块之前的一行上遇到java.lang.ArrayIndexOutOfBoundsException: null错误。我首先想到的是,此空指针是由于C驱动器中没有名为test.jpg的文件而产生的。我已调整以解决该问题,但在convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );上仍然遇到相同的空指针问题。为什么会这样呢?

另一方面,除了使用ImageIO编写文件之外,还有其他方法可以将byte []转换为图像的可视表示吗?我试图将数组打印到文件上并将其另存为“ .jpg”,但该文件无法打开。任何建议都会有所帮助。总而言之,我希望将byte []转换为图像并将其保存或将其呈现到浏览器中。哪个更容易/可行。

1 个答案:

答案 0 :(得分:0)

您的imageInByteArr似乎太短。我可以从中得到与您相同的错误

public static void main(String[] args) {
    int width = 1085;
    int height = 696;
    byte[] imageInByteArr = new byte[width ];
    BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr);

}

当使用width*height作为imageInByteArr或更大的大小时,我没有出现错误,但是当它小于您要更新的数据时,将引发异常。