2

I'm working now for e-book reader written in Java. Primary file type is fb2 which is XML-based type.

Images inside these books stored inside <binary> tags as a long text line (at least it looks like text in text editors).

How can I transform this text in actual pictures in Java? For working with XML I'm using JDOM2 library.

What I've tried does not produce valid pictures (jpeg files):

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();
    }
}
rolfl
  • 17,539
  • 7
  • 42
  • 76

1 Answers1

1

The image content is specified as being base64 encoded (see: http://wiki.mobileread.com/wiki/FB2#Binary ).

As a consequence, you have to take the text from the binary element and decode it in to binary data (in Java 8 use: java.util.base64 and this method: http://docs.oracle.com/javase/8/docs/api/java/util/Base64.html#getDecoder-- )

If you take the binaryText value from your code, and feed it in to the decoder's decode() method you should get the right byte[] value for the image.

rolfl
  • 17,539
  • 7
  • 42
  • 76