2016-01-15 1 views
0

Я пытаюсь вернуть bufferedImage от array of bytes, но я получаю сообщение об ошибке bufferedimage is null. Я действительно пробовал несколько способов, все закончилось тем же способом. Вот идет мой код:Получение bufferedImage из bytearray

1)

byte[] arr = Base64.decode(base64String); 
BufferedImage bImageFromConvert =ImageIO.read(new ByteArrayInputStream(arr)); 

2)

InputStream in = new ByteArrayInputStream(arr); 
BufferedImage bImageFromConvert = ImageIO.read(in); 

Я довольно уверен, что мой байтовый массив содержит данные, и я думаю, что ImageIO.read() где мой код идет не так.

+0

Что вы имеете в виду 'довольно sure'? Пробовали ли вы регистрировать длину массива? –

+0

Я попробовал распечатать массив байтов – Priyamal

+0

Можете ли вы опубликовать код конвертации изображения в Base64String? –

ответ

0

Ошибка в коде BufferedImage до Base64, поскольку вы опубликовали его в комментариях.

Вы никогда не пишите BufferedImage на номер ByteArrayOutputStream. Поэтому строка Base64 пуста, и чтение пустой строки создает nullBufferedImage.

Вы должны использовать этот код для кодирования изображения:

BufferedImage originalImage = ImageIO.read(new File("G:\\a.jpg")); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(originalImage, "jpg", baos); 
String base64String=Base64.encode(baos.toByteArray()); 

Для декодирования изображения используйте этот код:

byte[] arr = Base64.decode(base64String); 
BufferedImage bImageFromConvert =ImageIO.read(new ByteArrayInputStream(arr)); 
System.out.println(bImageFromConvert.getWidth()); 
+1

На самом деле было бы лучше (как быстрее, использовать меньше памяти * и * выглядеть лучше), чтобы просто Base64 закодировал содержимое 'a.jpg' напрямую (просто прочитайте содержимое в массив' byte'), вместо того, чтобы использовать 'ImageIO' для повторного кодирования JPEG в массив байтов. :-) – haraldK

0

Попробуйте этот код. Возможно, он работает. Это сработало для меня.

byte[] aByteArray = {}; 
    int width = ; 
    int height = ; 

    DataBuffer buffer = new DataBufferByte(aByteArray, aByteArray.length); 

    WritableRaster raster = Raster.createInterleavedRaster(buffer, width, height, 3 * width, 3, new int[] {0, 1, 2}, (Point)null); 
    ColorModel cm = new ComponentColorModel(ColorModel.getRGBdefault().getColorSpace(), false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); 
    BufferedImage image = new BufferedImage(cm, raster, true, null); 

Просто добавьте байт, ширину и высоту кода и настройте его.

+0

Я настолько тупой, как получить ширину и высоту – Priyamal

+0

вы не должны ее получить. вы должны добавить то, что хотите. –