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
ByteArrayInputStreamobject by passingbyte[]in the constructor. - Pass above
InputStreamtoImageIo.read()and getBufferedImagefrom 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.