我正在开发.opus音乐库软件,该软件可将音频/视频文件转换为.opus文件并自动用元数据标记它们。
该程序的先前版本已将专辑封面保存为二进制数据,显然是exiftool
所揭示的。
问题是,当我运行命令使用-b
选项将数据输出为二进制文件时,整个事情似乎都是二进制文件。我不确定如何使程序进行解析。我有点期待像Picture : 11010010101101101011...
这样的条目。
如何解析图片数据,以便为程序的较新版本重建图片? (我在Kubuntu 18.04上使用Java8_171)
答案 0 :(得分:1)
您似乎正在尝试在文本编辑器中打开原始字节,因为这些原始字节不代表任何文本编辑器都可以显示的字符,因此,这当然会给您带来gobble-dee-gook的麻烦。从exiftool的输出中可以看到,您能够知道图像的长度(以字节为单位)。只要您知道文件中的起始字节位置,就可以使用少量Java代码使您的任务相对容易。如果您可以在文件中找到图像的起始位置,则应该可以执行以下操作:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
public class SaveImage {
public static void main(String[] args) throws IOException {
byte[] imageBytes;
try (RandomAccessFile binaryReader =
new RandomAccessFile("your-file.xxx", "r")) {
int dataLength = 0; // Assign this the byte length shown in your
// post instead of zero
int startPos = 0; // I assume you can find this somehow.
// If it's not at the beginning
// change it accordingly.
imageBytes = new byte[dataLength];
binaryReader.read(imageBytes, startPos, dataLength);
}
try (InputStream in = new ByteArrayInputStream(imageBytes)) {
BufferedImage bImageFromConvert = ImageIO.read(in);
ImageIO.write(bImageFromConvert,
"jpg", // or whatever file format is appropriate
new File("/path/to/your/file.jpg"));
}
}
}