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

时间:2014-01-29 10:15:38

标签: ios objective-c uiimage alassetslibrary

我需要知道图片是否已经在iOS图库中。我正在开发一个消息传递客户端应用程序,在我的聊天列表中,当我点击图像缩略图时,我能够下载传入消息的图像/视频。

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

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

以下是使用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我可以做到,但我一直在Apple的文档中搜索,但我没有看到任何内容。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

所以,你只有一个解决方案。将图像保存到文档目录中,并使用 CRC MD5 等算法存在文件。