Java:BufferedImage到字节数组并返回

我看到一些人有类似的问题,但我还没有find我正在寻找的东西。

所以,我有一个方法读取input图像,并将其转换为字节数组:

File imgPath = new File(ImageName); BufferedImage bufferedImage = ImageIO.read(imgPath); WritableRaster raster = bufferedImage .getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); 

我现在想要做的是将其转换回BufferedImage(我有一个应用程序,我需要这个function)。 请注意,“testing”是字节数组。

  BufferedImage img = ImageIO.read(new ByteArrayInputStream(test)); File outputfile = new File("src/image.jpg"); ImageIO.write(img,"jpg",outputfile); 

但是,这会返回以下exception:

  Exception in thread "main" java.lang.IllegalArgumentException: im == null! 

这是因为BufferedImage img为空。 我认为这与事实有关,在从BufferedImage到字节数组的原始转换中,信息被改变/丢失,使得数据不能再被识别为jpg。

有没有人有任何build议如何解决这个问题? 将不胜感激。

build议将其转换为字节数组

 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "jpg", baos); byte[] bytes = baos.toByteArray(); 

请注意,调用closeflush将什么也不做,你可以通过查看他们的source / doc来看到这个:

closures一个ByteArrayOutputStream没有效果。

OutputStream的flush方法什么都不做。

因此使用这样的东西:

 ByteArrayOutputStream baos = new ByteArrayOutputStream(THINK_ABOUT_SIZE_HINT); boolean foundWriter = ImageIO.write(bufferedImage, "jpg", baos); assert foundWriter; // Not sure about this... with jpg it may work but other formats ? byte[] bytes = baos.toByteArray(); 

以下是关于尺寸提示的几个链接:

  • Java:内存高效的ByteArrayOutputStream
  • 每像素jpg位