检查图像是否已经在图库中并检索它

我需要知道一个图像是否已经在iOS画廊。 我正在开发一个消息客户端应用程序,在我的聊天列表中,当我点击图像缩略图时,我可以下载传入消息的图像/video。

问题是,当我点击缩略图时,我下载并将该图像保存到iOS照片库,但是如果再次点击,我不想再次下载并保存,我想从照片库中检索它。

恢复,我想在照片库中find图像并检索它。

这里是我的代码,使用ALAssetsLibrary将图像保存在自定义相册中:

[self writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock: ^(NSURL* assetURL, NSError* error) { if (error!=nil) { completionBlock(error); return; } //add the asset to the custom photo album [self addAssetURL: assetURL toAlbum:albumName withCompletionBlock:completionBlock]; } ]; -(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock { __block BOOL albumWasFound = NO; [self enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock: ^(ALAssetsGroup *group, BOOL *stop) { if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) { albumWasFound = YES; [self assetForURL: assetURL resultBlock: ^(ALAsset *asset) { //add photo to the target album [group addAsset: asset]; completionBlock(nil); } failureBlock: completionBlock ]; return; } if (group==nil && albumWasFound==NO) { //Target album does not exist, create it __weak ALAssetsLibrary* weakSelf = self; [self addAssetsGroupAlbumWithName:albumName resultBlock: ^(ALAssetsGroup *group) { [weakSelf assetForURL: assetURL resultBlock: ^(ALAsset *asset) { //add photo to the newly created album [group addAsset: asset]; completionBlock(nil); } failureBlock: completionBlock ]; } failureBlock: completionBlock ]; return; } } failureBlock: completionBlock ]; } 

也许用assetURL我可以做到这一点,但我一直在苹果的文档search,我什么也没有看到。

谢谢!!

您可以使用完成块在保存过程后获取资产URL。 您可以使用此资产url检索已保存的图片。

不幸的是, 你不能检查 Photolibrary中存在的文件 。 背后的原因是,系统会自动在保存到Photolibrary中的同时,将更多的信息embedded到图像中。 例如位置,时间等。所以二进制内容对于相同的图像将是不同的。

所以,你只有一个解决scheme。 将图像保存到文档目录中,并使用CRCMD5等algorithm存在文件。