所有 iPhone 的 PHAsset 图像在全球范围内都是唯一的吗?

Posted

技术标签:

【中文标题】所有 iPhone 的 PHAsset 图像在全球范围内都是唯一的吗?【英文标题】:IS PHAsset image unique globally for all iPhones? 【发布时间】:2017-07-05 10:41:20 【问题描述】:

当使用 Photo 框架获取图像时,我从 PHAsset 对象中获取画廊的所有图像。我的问题是来自 PHAsset 的图像是全球唯一的还是特定于设备的。我可以在不同的 iPhone 上使用相同的 PHAsset 图像吗?我不想将 UIImage 转换为 NSData 并再次将其从 NSData 转换为 UIImage。

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

//set up fetch options, mediaType is image.
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];

for (NSInteger i =0; i < smartAlbums.count; i++) 
    PHAssetCollection *assetCollection = smartAlbums[i];
    PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options];

    NSLog(@"sub album title is %@, count is %ld", assetCollection.localizedTitle, (unsigned long)assetsFetchResult.count);
    if (assetsFetchResult.count > 0 && ![assetCollection.localizedTitle isEqualToString: @"Recently Deleted"])             

        for (PHAsset *asset in assetsFetchResult) 
            PHImageRequestOptions *option = [PHImageRequestOptions new];
            option.synchronous = YES;

            [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height-100) contentMode:PHImageContentModeAspectFit options:option resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) 
                [mutArrAsset addObject:asset];

                [self.imagesURLArray addObject:result];
            ];

            NSLog(@"asset are %@", asset);
        

【问题讨论】:

【参考方案1】:

PHAsset 表示指向用户照片库中图像的指针。人们在他们的手机上有不同的图像,因此将指针传递给不同的手机是没有意义的。出于这个原因,PHAsset 的 id 被显式称为 localIdentifier

如果您想将图像从一台设备传输到另一台设备,您必须将其传输为NSData

【讨论】:

以上是关于所有 iPhone 的 PHAsset 图像在全球范围内都是唯一的吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在没有 PHAsset 的情况下将照片存储在 iPhone 上?

在核心数据中保存 PHAsset?

在不加载 PHAsset us 照片库的情况下获取所有图像本地标识符/文件路径

从 PHAsset 加载图像非常慢

应用程序在 swift 中为所有视频 PHAsset 播放相同的视频

PHImageManager 在许多图像请求后崩溃