Convert Byte Array to BufferedImage in Java

Convert byte array to BufferedImage in java

In this article, we will see how to convert byte array to BufferedImage in java.

💡 Outline

To convert byte array to BufferedImage, you can use below code:

  InputStream inputStream = new ByteArrayInputStream(byteArr); // byte[] byteArr 
  BufferedImage bufferImage = ImageIO.read(inputStream);

Convert byte array image to BufferedImage in java

Using ByteArrayInputStream

Here are steps to convert byte array to BufferedImage in java.

  • Create ByteArrayInputStream object by passing byte[] in the constructor.
  • Pass above InputStream to ImageIo.read() and get BufferedImage from it.
package org.arpit.java2blog;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;

public class ByteArrayToBufferedImageMain {

    public static void main(String[] args) throws IOException {
        Path source = Paths.get("MyFile.png");
        BufferedImage bufferedImage = ImageIO.read(source.toFile());

        byte[] byteArr  =  getByteArrayForImage(bufferedImage);

        BufferedImage bufferedImageNew =  convertByteArrayToBufferedImage(byteArr);
        System.out.println(bufferedImageNew);
    }

// convert byte[] to a BufferedImage
    public static BufferedImage convertByteArrayToBufferedImage(byte[] byteArr) throws IOException {
        InputStream is = new ByteArrayInputStream(byteArr);
        BufferedImage bufferedImage = ImageIO.read(is);
        return bufferedImage;
    }

    // Get byte array from input file
    public static byte[] getByteArrayForImage(BufferedImage bufferedImage) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "png", baos);
        byte[] bytesArr = baos.toByteArray();
        return bytesArr;
    }
}

Output:

BufferedImage@5bfbf16f: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@150c158 transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 500 height = 500 #numDataElements 3 dataOff[0] = 2

Using BufferedImage’s setData

Above approach may not work in some case and may return null.

You can follow below steps to use this method as per this stackoverflow thread.

  • Create a blank image
  • Transform byte array to Raster and use setData to fill the image
 // convert byte[] to a BufferedImage
    public static BufferedImage convertByteArrayToBufferedImage(byte[] byteArr) throws IOException {
        BufferedImage bufferedImage=new BufferedImage(10, 10, BufferedImage.TYPE_INT_BGR);
        Raster raster = Raster.createRaster(bufferedImage.getSampleModel(), new DataBufferByte(byteArr, byteArr.length), new Point());
        bufferedImage.setData( raster);
        return bufferedImage;
    }
    

That’s all about how to convert byte array to BufferedImage in java.

[social_share share_on="facebook,twitter,linkedin,whatsapp"][post_navigator in_same_term="true"]

Leave a Reply

Your email address will not be published. Required fields are marked *

Subscribe to our newletter

Get quality tutorials to your inbox. Subscribe now.