从 Java 中的 fb2 文件获取图像

Getting image from fb2 file in Java

我现在正在为用 Java 编写的电子书 reader 工作。主要文件类型是 fb2,这是基于 XML 的类型。

这些书中的图像作为长文本行存储在 <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();
    }
}

图像内容被指定为 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[] 值。