无法从 MPMediaItemPropertyArtWork 获取 UIImage

Posted

技术标签:

【中文标题】无法从 MPMediaItemPropertyArtWork 获取 UIImage【英文标题】:Not able to get the UIImage from MPMediaItemPropertyArtWork 【发布时间】:2011-07-07 01:18:08 【问题描述】:

我有以下代码从 MPMediaItemPropertyArtWork 获取 UIImage 以在我的视图中显示封面艺术。我从 mediaItem 中获得了非 NULL 图稿,但是,当我尝试从图稿中提取 UIImage 时,它​​返回 NULL 并且我在 UIImageView 中看不到任何内容。任何帮助将不胜感激。

CGSize artworkSize = CGSizeMake(30, 30);
UIImage *artworkImage;
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork];
if (artwork) 
    NSLog(@"artwork available");
    artworkImage = [artwork imageWithSize:artworkSize];
 else 
    NSLog(@"artwork not available");
    artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"];


NSLog(@"artworkImage = %@", artworkImage);

coverArtView.image = artworkImage;

【问题讨论】:

您找到解决方案了吗? MPMediaItemArtwork is null while cover is available in iTunes的可能重复 【参考方案1】:

试试这个 - 使用 UItableview 来显示专辑详细信息。

声明 MPMediaItemCollection *userMediaCollection;

 -(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 

[self setUserMediaCollection:mediaItemCollection];

[self dismissModalViewControllerAnimated:YES];

  


MPMediaItem *mItem = (MPMediaItem *)[userMediaCollection.items  objectAtIndex:indexPath.row];

    MPMediaItemArtwork *artWork = [mItem valueForProperty:MPMediaItemPropertyArtwork];

    cell.imageView.image = [artWork imageWithSize:CGSizeMake(30, 30)];

其中 userMediaCollection 是您的 MPMediaItemCollection

【讨论】:

感谢 Karthikeyan。但我看不出您的代码与我发布的代码有何不同。事实上是一样的。我看到的问题是此代码在与 iTunes 同步(转移购买)后完美运行,但在同步之前无法正常运行。如果我从 iPhone 上的 iTunes 购买歌曲,然后启动我的应用程序,则此代码不会显示任何图像。但如果我与 iTunes 同步,则同样有效。不知道同步时会发生什么变化。 我看到的是代码在我的 iPad 上运行,但在我的 iPhone 上运行不了。【参考方案2】:

试试这个...它是工作。

CGSize artworkSize = CGSizeMake(30, 30);
UIImage *artworkImage;
MPMediaItemArtwork *artwork = [song valueForProperty: MPMediaItemPropertyArtwork];
artworkImage = [artwork imageWithSize:artworkSize];

if (artworkImage == nil) 
  NSLog(@"artwork not available");
  artworkImage = [UIImage imageNamed:@"EmptyAlbum.png"];


coverArtView.image = artworkImage;

【讨论】:

【参考方案3】:

我知道这个问题现在有点老了,但是对于任何发现这个问题的人来说,这可能会有所帮助:

我为此苦苦思索了几个小时,因为在我的应用程序中的一个视图控制器中获取艺术品,但在我的 UITableViewController 中却没有。我的代码在这两种情况下看起来完全一样(并且与你的非常相似),除了一件事情:

let albumArtImage = albumArt.imageWithSize(cell.imageView.bounds.size)

尺寸! (很抱歉用 Swift 写这个,但你明白了)。这听起来很愚蠢,但 MPMediaItemArtwork 拒绝给我一个小图像。我实际上只是将其更改为更大的尺寸,如下所示:

let albumArtImage = albumArt.imageWithSize(CGSize(width: 150, height: 150))

它奏效了。无论如何,您都可以调整 UIImage 的大小以满足您的需要。

如果有人发现这个并且这个(愚蠢的)解决方案有效,请通过回复或其他方式告诉我。

【讨论】:

这也是我注意到的。您还应该提交一个雷达,因为这似乎是一个 ios 8 错误。 你是怎么得到albumArt的?是MPMediaItemArtwork吗? 见原问题的第 3 行。【参考方案4】:

如何初始化 MPMusicPlayerController?应该是:

MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer];

【讨论】:

【参考方案5】:

查看答案:https://***.com/a/26463261/883413

似乎是一个 iOS 错误。如果返回的图像为零,请尝试使用原图尺寸。

UIImage *image = [artwork imageWithSize:size];
if (image == nil) 
    image = [artwork imageWithSize:artwork.bounds.size];

【讨论】:

以上是关于无法从 MPMediaItemPropertyArtWork 获取 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

无法从资源加载位图

为啥我无法从 Alamofire 获取请求结果

DateTimeParseException:无法解析文本:无法从 TemporalAccessor 获取 LocalDateTime

无法从 'char[]' 转换为 'string[]' [关闭]

无法远程调试应用程序 - 端口无法从外部访问

无法从状态 '' 解析 '...'