【问题标题】:Get cover art from a music file using JAudioTagger in Java在 Java 中使用 JAudioTagger 从音乐文件中获取封面艺术
【发布时间】:2015-11-11 21:24:45
【问题描述】:

我正在使用 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)));

【问题讨论】:

    标签: java metadata id3v2 id3-tag audio


    【解决方案1】:

    通常,最简单的方法是:

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

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

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

    【讨论】:

      【解决方案2】:

      在我的应用程序中我使用

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-04
          • 2014-06-18
          • 2014-06-12
          • 1970-01-01
          相关资源
          最近更新 更多