Как сохранить массив байтов в виде файла образа на диске?
У меня есть представление байтового массива изображения. Как сохранить его на диске в качестве файла изображения.
Я уже сделал это
OutputStream out = new FileOutputStream("a.jpg");
out.write(byteArray);
out.flush();
out.close();
Но когда я открываю изображение, дважды щелкнув его, он не покажет никакого изображения.
Ответы
Ответ 1
Кроме того, что вы не используете блок try/finally (по крайней мере, в коде, который вы указали), это должно быть хорошо. (Кстати, вам не нужно очищать выходной поток, если вы его закрываете.)
Поскольку он не работает, предложение byteArray
фактически не содержит JPEG-кодированного изображения. Как вы создали byteArray
для начала? Если это "сырое" представление, вы, вероятно, захотите его закодировать, например. используя пакет javax.imageio.
Ответ 2
Вы можете использовать класс FileOutputStream:
FileOutputStream fos = new FileOutputStream("image.jpg");
try {
fos.write(someByteArray);
}
finally {
fos.close();
}
Ответ 3
Вы можете использовать ImageIO API.
Детали могут быть немного волосатыми, но сначала вы, вероятно, захотите создать BufferedImage с использованием типа TYPE_BYTE_INDEXED и некоторого подходящего экземпляра IndexColorModel. Затем поместите свой массив байтов. Подсказка: вы можете получить внутреннее представление BufferedImage с помощью:
myDataBuffer = myBufferedImage.getRaster().getDataBuffer();
Скорее всего, вернет буфер данных типа DataBufferByte (check!), из которого вы получите массив байтов с
myByteArray = ((DataBufferByte) myDataBuffer).getData();
Затем вы можете использовать System.arraycopy для копирования массива байтов на него.