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