iOS 根据图片URL从本地相册获取图片

最近做一个聊天的项目,需要发送图片后读取本地图片显示到列表里。刚开始的时候,天真的认为可以用SDWebImage直接加载,然后并不能行。

于是在网上搜了搜,如何根据从相册获取的UIImagePickerControllerReferenceURL读取图片, 代码如下:

#import "ViewController.h"
#import <AssetsLibrary/AssetsLibrary.h> @interface ViewController ()<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
- (IBAction)showImagePickerVC:(id)sender;
@property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
}

弹出图片选择器

- (IBAction)showImagePickerVC:(id)sender {

    UIImagePickerController *imagePickerVC = [[UIImagePickerController alloc] init];

    imagePickerVC.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePickerVC.allowsEditing = YES; imagePickerVC.delegate = self; [self presentViewController:imagePickerVC animated:YES completion:nil]; }

回调

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"%@", info);
NSURL *imagePath = info[@"UIImagePickerControllerReferenceURL"]; if ([[[imagePath scheme] lowercaseString] isEqualToString:@"assets-library"]) { // Load from asset library async
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@autoreleasepool {
@try {
ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init];
[assetslibrary assetForURL:imagePath
resultBlock:^(ALAsset *asset){
ALAssetRepresentation *rep = [asset defaultRepresentation];
CGImageRef iref = [rep fullScreenImage];
if (iref) {
//进行UI修改
dispatch_sync(dispatch_get_main_queue(), ^{
_imageView.image = [[UIImage alloc] initWithCGImage:iref];
}); } }
failureBlock:^(NSError *error) { NSLog(@"从图库获取图片失败: %@",error); }];
} @catch (NSException *e) {
NSLog(@"从图库获取图片异常: %@", e);
}
}
}); } [picker dismissViewControllerAnimated:YES completion:nil];
}
上一篇:《javascript高级程序设计》学习笔记 | 9.1.代理基础


下一篇:反射学习总结