选择手机图片上传&PHIMageManager

来源:互联网 发布:搜狗上的动态壁纸软件 编辑:程序博客网 时间:2024/04/29 20:16

现在很多手机app中都带有图片分享元素,这篇文章将展示这个功能完成过程。下面我将做个简单的界面实现这一功能。

准备工作
首先创建一个singleview Application。 pod 导入 QBImagePickerController 三方库(这个库用的比较普遍)。
打开项目在viewcontroller头文件里导入:

#import <QBImagePickerController/QBImagePickerController.h>

然后构建界面:一个添加按钮,两个imageview用于回显图片。界面如下:
这里写图片描述
选择图片并回显
现在来实现点击button选择图片回显在两个imageview中。

- (void)addPhotoAction{    self.pickPhotoVC = [QBImagePickerController new];    self.pickPhotoVC.delegate = self;    self.pickPhotoVC.allowsMultipleSelection = YES;    [self presentViewController:self.pickPhotoVC animated:YES completion:^{    }];}

在viewcontroller(self)中添加QBImagePickerControllerDelegate代理,allowsMultipleSelection属性为允许同时选择多张图,默认是NO。
现在运行程序,点击button就能进入图片选择界面了:
这里写图片描述

但是会发现,点击done(完成)按钮并不会回原界面。这时候需要实现代理方法:

- (void)qb_imagePickerController:(QBImagePickerController *)imagePickerController didFinishPickingAssets:(NSArray *)assets {    //退出图片选择页面,回到原界面    [self dismissViewControllerAnimated:YES completion:NULL];}

原先的重现方法—ALAsset
之前的QBImagePickerController中所使用的是ALAsset 来重现图片,但是ALAsset在IOS9已经不赞成使用了,先贴一段原先用ALAsset重现图片的代码(仍然可以使用,但是现在pod进来的QB已经没有自动导入ALAsset库了,我们可以在项目设置里 build Phases中添加AssetsLibrary.framework 并在viewcontroller 头文件中导入#import

//用来存储图片 NSMutableArray *mutArr = [NSMutableArray new]; for (ALAsset *asset in assets) {    UIImage *image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];    UIImage *croppedImage = [image imageByScalingWithMaxWidth:kImageMaxWidth];    [mutArr addObject:croppedImage];}

ios9推荐的重现方法 — PHAsset
PhAsset可以回显你手机照片库的image同时也能回显你iCloud中的图片。
先记录一下在本栗子中如何回显,后面再详细去了解PHAsset。

//用来存储图片NSMutableArray *mutArr = [NSMutableArray new];for (PHAsset *asset in assets) {   //asset中取image   PHImageManager *manager = [PHImageManager defaultManager];   [manager requestImageForAsset:asset                      targetSize:CGSizeMake(100.0, 100.0)                     contentMode:PHImageContentModeAspectFill                         options:nil                   resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {                       [mutArr addObject:result];                       if([mutArr count] ==  [assets count]){                            //显示图片                            [self showImages:mutArr]                       }                   }]; }

ok,再次运行便能选择图片和看到图片回显效果了。
如图:这里写图片描述

保存图片到沙盒

- (void)saveImages:(NSArray *)images{    //初始化 用来保存图片沙盒地址    NSMutableArray *mutArr = [NSMutableArray array];    NSString *filePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Library"] stringByAppendingPathComponent:@"images"];    //清空历史图片    NSFileManager *fileManager = [NSFileManager defaultManager];    if ([fileManager fileExistsAtPath:filePath]) {        [fileManager removeItemAtPath:filePath error:nil];    }    for (UIImage *croppedImage in images) {        NSData *data = UIImageJPEGRepresentation(croppedImage, .72);        BOOL success = [[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];        if (success) {            //写入沙盒            NSString *imageSaveTime = [self getTimeAndRandom];            NSString *path = [filePath stringByAppendingFormat:@"/%@.jpg",imageSaveTime];            [data writeToFile:path atomically:YES];            [mutArr addObject:path];        }    }}

最后 上传沙盒内的文件到服务端。比如你用的AFNetworking — 去百度吧,hoho。

关于PHImageManager之后再补全吧。

0 0
原创粉丝点击