Patrícia Villela
Patrícia Villela

Reputation: 839

Java Converting ByteArray into Image

I'm reading a file that has an array of bytes. I downloaded the Apache Commons IO library to use the FileUtils' method readFileToByteArray

File file = new File("/home/username/array.txt");
FileUtils fu = new FileUtils();
byte[] array = FileUtils.readFileToByteArray(file);

I want to convert the array of bytes to an Image.

ByteArrayInputStream bis = new ByteArrayInputStream(array);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("gif");

ImageReader reader = (ImageReader) readers.next();
Object source = bis;

ImageInputStream iis = ImageIO.createImageInputStream(source);

reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();

Image image = reader.read(0, param); // this line is the problem

When the code goes to the referred line, it throws an Exception saying

javax.imageio.IIOException: Unexpected block type 128!

I don't know what this exception means, therefore, I don't know how to fix it. Any further information that could be helpful just need to be requested.

Thanks

Upvotes: 1

Views: 5625

Answers (4)

RDD
RDD

Reputation: 145

without byte[] i feel this will be good for multipart file transfer,for this we need apache common jar files

    final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
        IOUtils.copy(request.getPart("file").getInputStream(), output);
        output.close();

Upvotes: 0

Vlad
Vlad

Reputation: 18633

I've tried your code on this file and it works fine.

What's the format of your array.txt? readFileToByteArray() expects a binary format, and your image reader will further expect it to be a GIF file.

Upvotes: 1

WPrecht
WPrecht

Reputation: 1382

That code means the reader couldn't decipher the metadata on the image file. Make sure the right file is getting read and it's well formed. Or it may be expecting a different file type.

Upvotes: 1

amicngh
amicngh

Reputation: 7899

Once you have byte[] you can use ImageIO to write it to BufferedImage.

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(array));
ImageIO.write(bImageFromConvert, "gif", new File("c:/test.gif"));

Upvotes: 1

Related Questions