Java: BufferedImage to byte array and back

好久不见. 提交于 2019-11-26 09:01:57

问题


I see that a number of people have had a similar problem, however I\'m yet to try find exactly what I\'m looking for.

So, I have a method which reads an input image and converts it to a byte array:

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

What I now want to do is convert it back into a BufferedImage (I have an application for which I need this functionality). Note that \"test\" is the byte array.

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

However, this returns the following exception:

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

This is because the BufferedImage img is null. I think this has something to do with the fact that in my original conversion from BufferedImage to byte array, information is changed/lost so that the data can no longer be recognised as a jpg.

Does anyone have any suggestions on how to solve this? Would be greatly appreciated.


回答1:


This is recommended to convert to a byte array

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



回答2:


Note that calling close or flush will do nothing, you can see this for yourself by looking at their source/doc:

Closing a ByteArrayOutputStream has no effect.

The flush method of OutputStream does nothing.

Thus use something like this:

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();

Here are a few links concerning the size hint:

  • Java: Memory efficient ByteArrayOutputStream
  • jpg bits per pixel


来源:https://stackoverflow.com/questions/15414259/java-bufferedimage-to-byte-array-and-back

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!