选择手机图片上传&PHIMageManager

本文介绍了如何在iOS应用中实现图片选择功能,通过QBImagePickerController库和PHImageManager来实现图片预览和回显,并讨论了从ALAsset到PHAsset的迁移原因。最终,图片会被保存到沙盒并准备上传到服务端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在很多手机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之后再补全吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值