从 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[]
值。
我现在正在为用 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[]
值。