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];

}

 

你可能感兴趣的:(ios)