从 iOS 中的相机胶卷中获取特定图像
Posted
技术标签:
【中文标题】从 iOS 中的相机胶卷中获取特定图像【英文标题】:Fetching specific image from Camera roll in 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:添加了上面的代码。 【参考方案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 只是一个示例。
【讨论】:
以上是关于从 iOS 中的相机胶卷中获取特定图像的主要内容,如果未能解决你的问题,请参考以下文章