使用Java中的JAudioTagger从音乐文件中获取封面

时间:2015-08-18 19:19:25

标签: java metadata id3v2 id3-tag audio

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

这是我当前的代码,在调试时,coverArt BufferedImage显示为null。我已经检查过,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)));

3 个答案:

答案 0 :(得分:2)

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

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

返回MP3的第一个图形(大多数情况下是您要查找的封面)。如有必要,可以将其强制转换为BufferedImage。

答案 1 :(得分:0)

通常情况下,最简单的方法就是:

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

你不必进行任何铸造,也不必在框架体层工作。你有没有理由这样做?

看看imageRawData - 是否正确阅读?也许问题出在图像层面。如果它是JPEG,则应该以{{1​​}}为例。

答案 2 :(得分:0)

任何还在寻找答案的人都可以做到这一点。

    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);