【问题标题】:Fetching specific image from Camera roll in iOS从 iOS 中的相机胶卷中获取特定图像
【发布时间】:2016-02-19 08:56:26
【问题描述】:

目前我正在使用 UIImageWriteToSavedPhotosAlbum 通过点击特定按钮从特定网址保存图像。图片保存成功。

现在,稍后我想通过点击相机胶卷相册 iOS 中的相同按钮来检索相同的图像。我不想再次调用图像的 url。

如何使用 Objective-C 实现这一结果?

 [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url
                             options:0
                            progress:^(NSInteger receivedSize, NSInteger expectedSize) {

                            }
                           completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                               if (image && finished) {
                                   UIImageWriteToSavedPhotosAlbum(image,self,
                                       @selector(image:didFinishSavingWithError:contextInfo:),
                                                                      nil);
                               }
                           }];

【问题讨论】:

  • 你能发布你的代码吗?
  • 改用 ALAssestLibrary 方法,您将拥有更多控制权。
  • @elio.d - 但是当前版本的 iOS 已弃用此库。
  • @RohitaxRajguru 不推荐使用并不意味着您不能使用它。无论如何,使用作为替代品的 PhotoFramework。
  • @KamleshShinarakhiya:添加了上面的代码。

标签: ios objective-c iphone xcode


【解决方案1】:

您必须使用 Photos 框架而不是使用 UIImageWriteToSavedPhotosAlbum 保存。

获取图片后使用照片框架保存它。

__block PHObjectPlaceholder *placeholderAsset;

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

       PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
       placeholderAsset = changeRequest.placeholderForCreatedAsset;

    } completionHandler:^(BOOL success, NSError *error) {
        if (success) {
            NSLog(@"Success");

            // Save Identifier here
            [[NSUserDefaults standardUserDefaults] setObject:placeholderAsset.localIdentifier forKey:@"PhotoIdentifier"];
        }
        else {
            NSLog(@"write error : %@",error);
        }
    }];

// 使用标识符检索图像

PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];
allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions];

[allPhotos enumerateObjectsUsingBlock:^(PHAsset   * _Nonnull photoAsset, NSUInteger idx, BOOL * _Nonnull stop) {

    NSString *photoIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"PhotoIdentifier"];
    if([photoIdentifier isEqualToString:photoAsset.localIdentifier]){

        [[PHImageManager defaultManager]requestImageForAsset:photoAsset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:nil resultHandler:^(UIImage *result, NSDictionary *info){
            if ([info objectForKey:PHImageErrorKey] == nil && ![[info objectForKey:PHImageResultIsDegradedKey] boolValue]) {

                // image is here as a result parameter
                *stop = YES;
            }
        }];
    }
}];

您可以使用任何其他介质来存储照片标识符,NSUserDefaults 只是一个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多