iOS:从 iPod 库中获取和显示专辑插图

Posted

技术标签:

【中文标题】iOS:从 iPod 库中获取和显示专辑插图【英文标题】:iOS: Getting and displaying album artwork from iPod library 【发布时间】:2013-08-25 08:49:39 【问题描述】:

我想从 iPod 库中的有声读物中获取专辑封面,但我不明白如何使用MPMediaItemPropertyArtwork

- (NSArray *)audiobooks

    MPMediaPropertyPredicate *abPredicate =
    [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeAudioBook]
                                     forProperty:MPMediaItemPropertyMediaType];

    MPMediaQuery *abQuery = [[MPMediaQuery alloc] init];
    [abQuery addFilterPredicate:abPredicate];
    [abQuery setGroupingType:MPMediaGroupingAlbum];
    NSArray *books = [abQuery collections];
    return books;


- (MPMediaItem *)mediaItemForRow: (NSInteger)row

    NSArray *audiobooks = self.audiobooks;
    MPMediaItem *mediaItem = nil;

    for (id object in audiobooks) 
        if ([object isKindOfClass:[MPMediaItemCollection class]]) 
            MPMediaItemCollection *book = (MPMediaItemCollection *)object;

            id item = [book items][row];
            if ([item isKindOfClass:[MPMediaItem class]]) 
                mediaItem = (MPMediaItem *)item;

            
        
    
    return mediaItem;

所以现在我可以像这样获得媒体项目的标题:

NSString *title = [mediaItem valueForProperty:MPMediaItemPropertyArtist];

但是我如何获得艺术品以便在 UIImage 中显示它?有这个属性:

[mediaItem valueForProperty:MPMediaItemPropertyArtwork]

我还没有弄清楚如何使用它。

【问题讨论】:

Not able to get the UIImage from MPMediaItemPropertyArtWork的可能重复 这是一个有用的参考:***.com/questions/28979013/… 【参考方案1】:

您应该能够通过以下方式将艺术品提取到 UIImage 中:

MPMediaItemArtwork *itemArtwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *artworkUIImage = [itemArtwork imageWithSize:CGSizeMake(64, 64)];

本质上,MPMediaItemPropertyArtwork 属性返回一个MPMediaItemArtwork,然后您可以从中获取 UIImage。

【讨论】:

谢谢!就像注释一样,imageWithSize 方法似乎不会调整图像大小,而是返回 64x64 或 48x48 的固定大小,这可能与我的 tableView 单元格有关,但我不这么认为。 @TomLilletveit 正如你所暗示的,我怀疑是 UITableViewCell 决定了 UIImage 的显示大小。【参考方案2】:

我刚刚将上述答案转换为 Swift 3

let songInfo: MPMediaItem = self.arrSongs[indexPath.row] as! MPMediaItem

// 歌曲信息是媒体项。

 let itemArtwork :MPMediaItemArtwork  = songInfo.artwork!
 cell.songImg.image = itemArtwork.image(at: CGSize(width: 50, height: 50))

【讨论】:

以上是关于iOS:从 iPod 库中获取和显示专辑插图的主要内容,如果未能解决你的问题,请参考以下文章

快速从 iPod 库中获取专辑列表

获取 iPod 库中项目的专辑年份?

如何在音频文件中添加艺术品,以显示在专辑封面中?

如何在 iOS 的 iPod 库中获取歌曲的物理文件位置

如何在 iOS 的 iPod 库中获取歌曲的文件位置

iPhone 获取所有专辑/艺术家