iOS:从iPod库获取和显示专辑封面艺术品

5

我想从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]

我还没有找到如何使用它的方法。


可能是重复的问题:无法从MPMediaItemPropertyArtWork获取UIImage - John Parker
这是一个有用的参考链接:https://dev59.com/Sojca4cB1Zd3GeqPzaBj#48035857 - J-Dizzle
2个回答

9
您应该能够通过以下方式将艺术作品提取到UIImage中:
MPMediaItemArtwork *itemArtwork = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *artworkUIImage = [itemArtwork imageWithSize:CGSizeMake(64, 64)];

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


谢谢!只是一条注意事项,imageWithSize方法似乎无法改变图像大小,而是返回固定的64x64或48x48大小,可能与我的tableView单元格有关,但我不这么认为。 - Tom Lilletveit
正如你所暗示的那样,我怀疑是UITableViewCell决定了UIImage的显示大小。 - John Parker

1

我刚刚将上面的答案转换为 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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接