0

我正在使用 JAudioTagger 从音乐文件中获取元数据,获取标题、年份等工作正常,但我在获取封面时遇到问题。我无法找到任何在线搜索的示例,任何帮助都会很棒!

这是我当前的代码,coverArt BufferedImage 在调试时显示为空。我已经检查过,mp3 文件有一个封面图片。

ID3v23Tag id3v23Tag = (ID3v23Tag)tag;
    TagField coverArtField =
    id3v23Tag.getFirstField(org.jaudiotagger.tag.id3.ID3v23FieldKey.COVER_ART.getFieldName());
    FrameBodyAPIC body = (FrameBodyAPIC)((ID3v23Frame)coverArtField).getBody();
    byte[] imageRawData = (byte[])body.getObjectValue(DataTypes.OBJ_PICTURE_DATA);
    coverArt = ImageIO.read(ImageIO.createImageInputStream(new ByteArrayInputStream(imageRawData)));
4

3 回答 3

2

在我的应用程序中,我使用

MP3File mp3;    
mp3.getTag().getFirstArtwork();

它返回 MP3 的 firstArtwork(在大多数情况下是您正在寻找的封面)。如有必要,可以将其转换为 BufferedImage。

于 2016-02-09T21:02:37.270 回答
1

任何仍在寻找答案的人都可以这样做..

    AudioFile f = AudioFileIO.read(new File(path));
    Tag tag = f.getTag();
    if(tag.hasField("Cover Art")){
        byte[] b = tag.getFirstArtwork().getBinaryData();
    }

现在你有了二进制数据中的图像。如果需要,您可以轻松地将其与滑翔或毕加索一起使用。

    Glide.with(this).load(b).into(ImageView);
于 2019-03-22T20:44:29.457 回答
0

通常,最简单的方法很简单:

List<Artwork> existingArtworkList = tag.getArtworkList();

您不必在框架体级别执行任何铸造或工作。你这样做有理由吗?

看看imageRawData- 是否被正确读取?也许问题出在 imageio 级别。例如,如果它是 JPEG,它应该开始0xFF, 0xD8

于 2015-08-24T08:35:00.567 回答