2012-05-16 4 views
0

Я хочу, чтобы получить изображение из строки, закодированной в базе 64.декодирования изображений с parseBase64Binary

Я использую этот метод:

String image = ABAfXWQAQH11kAEB9dZABAfXWQAQH11kAEB9dZABAfXW ... 

public void change(){ 
byte [] image = DatatypeConverter.parseBase64Binary(image); 
System.out.println(image+" bytes"); 
InputStream in = new ByteArrayInputStream(imagen); 
System.out.println(in+" inStream"); 
BufferedImage finalImage= ImageIO.read(in); 
System.out.println(finalImage+" buffer"); 
} 

Пользуясь тем, что я получаю этот выход

[[email protected] bytes 
[email protected] inStream 
null buffer 
Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at MyCLass.change(MyClass.java:48) 
    at MyClass.<init>(MyClass.java:26) 
at MyClass.main(MyClass.java:59) 

Почему bufferedImage null?

+1

Что такое 'imagen'? – slhck

+0

Вы можете найти [этот ответ] (http://stackoverflow.com/a/10327584/1048330) полезно. Он показывает, как использовать «Base64.decodeBase64» для загрузки изображения из строки Base64. – tenorsax

+0

Моя ошибка - изображение. – Oscar

ответ

1

От the documentation:

Если не зарегистрирован ImageReader не претендует, чтобы иметь возможность читать результирующий поток, нуль возвращается.

Так что я думаю, что ни один зарегистрированный ImageReader не претендует, чтобы иметь возможность читать ...

Предполагая, что ваш InputStream код не опечатка вы получили в вашем вопросе (imagen вместо image), что оставляет три варианта я могу думать легко:

  • Ваши данные изображения растлилась начать с
  • Вы закодированы его неправильно в base64
  • DatatypeConverter.parseBase64 не совсем подходит для формата base64, который у вас есть. (Это не конвертер, который я использовал раньше. Существует множество опций для base64 - например, this public domain one)
  • Данные все прекрасны к моменту достижения ImageIO.read, но это не поддерживаемый формат изображения.

Вы должны решить, какой из этих случаев - в частности, что произойдет, если вы полностью пропустите кодировку base64? Или что произойдет, если вы сравните данные с кодировкой base64 с последующим декодированием с оригиналом? (Это, по крайней мере, одна и та же длина?) Если вы выписываете данные с расширением base64 в файл, можете ли вы открыть его в своей любимой программе изображений?

+0

Привет, Jon и спасибо, я думаю, что моя проблема - это строка кодировки, которую я получаю, потому что я пытаюсь декодировать с помощью sun.misc.BASE64Decoder, DatatypeConverter.parseBase64Binary и другого класса, который я нахожу и прекрасно работаю, если я кодирую и декодирую изображение. – Oscar

+0

@ Оскар: я нашел ваш комментарий несколько трудным для понимания ... вы говорите, что он * работает с BASE64Decoder, но * не работает с DatatypeConverter.parseBase64Binary? –

+0

@JonSkeet DatatypeConverter.parseBase64Binary() не работает с данными длиной более 65000 в Java SDK 1.6. См. Мой ответ здесь: http://stackoverflow.com/a/21173355/531524 –

Смежные вопросы