close
当前位置: 物联网在线 > 技术文库 > ios >

iOS 多选相册图片上传,添加、删除图片

通知:在使用下边的方法的时候出现的问题总结,猿友们看到后请自行更正。

问题一:有人反映打开本demo的时候第一次打不开相册,必须重新启动一下才可以打开。

此问题是由于初始化ZYQAssetPickerController懒加载造成的,在使用的时候不使用懒加载创建就可以解决

问题二:本地化图片

在demo中把图片确实本地化了一次,发现没有什么用。

[self.imageDataArray addObject:imageData];

因为这句代码已经把图片转换的字节流放到内存中了,再本地化一次感觉多此一举

问题三:如果图片是在iCloud上面的话用ZYQAssetPickerController选择图片会崩溃

如果图片不在本地而是在iCloud上面,需要把图片下载到本地然后在从本地选取。在第三方.m里面加上下面代码可以解决,加上之后虽然可以解决但是选择完图片在网络不好的情况下得等一会才可能看到选择的图片,方法还得自己写。

requestOptions.networkAccessAllowed = YES;

以上是出现的问题,在经过对比之后朋友推荐一个更好的第三方TZImagePickerController,可以去github下载对比一下,感觉瞬间完爆本demo。

上传图片功能在app里面很常见,单选图片,多选图片,然后还让展示出来等等,总之要求很多了,以前自己的项目中也用到了这个多选上传工能,当时写的比较着急,写的不是很好,最近闲下来就重新写了这个需求,先看图

iOS 多选相册图片上传,添加、删除图片

多选图片上传.gif

仔细想一下的话也没那么麻烦

首先多选相册里面的图片的话,我用的是第三方ZYQAssetPickerController 有兴趣的可以去github搜一下,因为以前项目中用得是这个。

引入ZYQAssetPickerController,并遵守代理

self.pickerController = [[ZYQAssetPickerController alloc] init]; _pickerController.maximumNumberOfSelection = 8; _pickerController.assetsFilter = ZYQAssetsFilterAllAssets; _pickerController.showEmptyGroups=NO; _pickerController.delegate=self; _pickerController.selectionFilter = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { if ([(ZYQAsset*)evaluatedObject mediaType]==ZYQAssetMediaTypeVideo) { NSTimeInterval duration = [(ZYQAsset*)evaluatedObject duration]; return duration >= 5; } else { return YES; }

接下来在需要打开相册的地方present出来就可以我的里面是这样的

[self presentViewController:self.pickerController animated:YES completion:nil];

这样在相册里面就可以多选图片了,接下里就是回调了实现代理方法

-(void)assetPickerController:(ZYQAssetPickerController *)picker didFinishPickingAssets:(NSArray *)assets{

在这里处理你选中的图片

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for (int i=0; i<assets.count; i++) { ZYQAsset *asset=assets[i]; [asset setGetFullScreenImage:^(UIImage *result) { dispatch_async(dispatch_get_main_queue(), ^{ //由于iphone拍照的图片太大,直接存入数组中势必会造成内存警告,严重会导致程序崩溃,所以存入沙盒中 //压缩图片,这个压缩的图片就是做为你传入服务器的图片 NSData *imageData=UIImageJPEGRepresentation(result, 0.8); [self.imageDataArray addObject:imageData]; [self WriteToBox:imageData]; //添加到显示图片的数组中 UIImage *image = [self OriginImage:result scaleToSize:CGSizeMake(80, 80)]; [self.imageArray addObject:image]; [self.collectionView reloadData]; }); }]; } }); [self dismissViewControllerAnimated:YES completion:^{ [self.collectionView reloadData]; }];

以上是代理方法中处理回调过来的图片,我这里面有两个数组,一个是imageArray,用于存储在集合视图显示的图片,一个是imageDataArray,用于存储压缩图片的字节流,我们不可能把选中的图片直接展示到集合视图上,iphone拍的照片太大(好几兆),尺寸也太大,这样放在我们集合视图那么小的imageview上面会出问题的,所以先剪裁图片,同时我把压缩的imageDataArray里面的原图存储在沙盒中,用于以后上传到服务器

这个是存储到沙盒中的代码

#pragma mark --------存入沙盒------------ - (void)WriteToBox:(NSData *)imageData{ _i ++; NSArray *filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //获取Document文件的路径 NSString *collectPath = filePath.lastObject; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:collectPath]) { [fileManager createDirectoryAtPath:collectPath withIntermediateDirectories:YES attributes:nil error:nil]; } // //拼接新路径 NSString *newPath = [collectPath stringByAppendingPathComponent:[NSString stringWithFormat:@"Picture_%ld.png",_i]]; NSLog(@"++%@",newPath); [imageData writeToFile:newPath atomically:YES]; }
(责任编辑:ioter)

用户喜欢...

Python:图片转字符画

作者:邓旭东HIT 字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画。 但是像素是有颜色深浅的,我...


OpenCV: 图片人脸识别

作者:邓旭东HIT 现在正在做论文,数据处理过程中有一个变量是对用户头像进行数据编码。图片有上万张,如果人工...


艾迈斯半导体新的高性能传感器接口解决方案使医疗、工业和安防CT扫描仪呈现更清晰、细节丰富的图片

AS5900是一款用于光电二极管阵列的26比特、128通道电流输入模拟数字转换器,在噪音、分辨率、线性、速度和功耗方面具备世界一流性能 全球领先的高性能传感器解决方案供应商艾迈斯半导体...


Unity+NGUI打造网络图片异步加载与本地缓存工具类(一)

我们在移动端的开发中,异步网络图片加载用的非常的多,在unity当中虽然有AssetBundle的存在,一般是先加载好游戏资源然后再进入场景,但是还有不少地方能够用到异步网络图片的加载以及...


Unity+NGUI打造网络图片异步加载与本地缓存工具类(二)

接上文,我们的工具类中的主要方法: public void SetAsyncImage(string url,UITexture texture) 按照前文分析的图片加载步骤来 public void SetAsyncImage(string url,UITexture texture){ //开始下载图片前,将UITexture的主...


Google开源核心图像识别技术,应用于Nest摄像头、图片搜索和谷歌街景

积极的开源策略也有助于将Google的TensorFlow打造成人工智能领域的主流机器学习框架平台IT经理网...


Social Listening 2.0,冲出图片数据的盲区

用户在社交网络中留下了海量信息,为企业进行消费者和市场研究提供了宝贵的数据资源,Social Listening(社群聆听)已...


更多选择 谷歌推17款Android Wear官方表盘

(肖恩)自去年12月之后,谷歌的Android Wear团队时隔半年再次带来了一批官方个性化表盘。本次发布的新表盘总数达到了17个之多,它们都是知名零售和时尚品牌所独家设计的。 个性化一直是...


图片变形的抗锯齿处理方法

前言 周末在微博上看到@周楷雯Kevin说起CALayer抗锯齿的问题 具体做法是: layer.allowsEdgeAntialiasing = true 想起了很久以前也遇到过类似的问题 那时候要做一个类贴纸的应用 理所当然会遇到贴纸缩...


Scrapy爬取美女图片续集

作者:七夜的故事 上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图...