2016-08-14 5 views
1

Я сейчас работаю для чтения электронных книг, написанных на Java. Основной тип файла - fb2, который является типом на основе XML.Получение изображения из файла fb2 в Java

Изображения внутри этих книг, хранящихся внутри <binary> теги в виде длинной текстовой строки (по крайней мере, это выглядит как текст в текстовых редакторах).

Как преобразовать этот текст в фактические изображения на Java? Для работы с XML я использую библиотеку JDOM2.

То, что я пытался не производит действительных изображений (JPEG-файлы):

private void saveCover(Object book) { 
    // Necessary cast to process with book 
    Document doc = (Document) book; 

    // Document root and namespace 
    Element root = doc.getRootElement(); 
    Namespace ns = root.getNamespace(); 

    Element binaryEl = root.getChild("binary", ns); 

    String binaryText = binaryEl.getText(); 

    File cover = new File(tempFolderPath + "cover.jpeg"); 

    try (
     FileOutputStream fileOut = new FileOutputStream(cover); 
     BufferedOutputStream bufferOut = new BufferedOutputStream(
      fileOut);) { 

     bufferOut.write(binaryText.getBytes()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

ответ

1

Содержание изображения указывается как в формате base64 (см: http://wiki.mobileread.com/wiki/FB2#Binary).

Как следствие, вы должны принять текст из binary элемента и декодировать его к двоичным данным (в Java 8 использование: java.util.base64 и этот метод: http://docs.oracle.com/javase/8/docs/api/java/util/Base64.html#getDecoder--)

Если взять значение binaryText от вашего кода и подать его в метод decode() декодера, вы должны получить правильное значение byte[] для изображения.

+0

Это работает как шарм! Спасибо! – Tol182