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)

用户喜欢...

干货:Unity游戏开发图片纹理压缩方案

对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。 在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式,如IOS设置成...


Zynq-7000学习笔记(十五)——在QT上调用opencv加载图片并显示

PC平台:WINDOWS 10 64位 + 虚拟机Ubuntu 14.04 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:ZedBoard USB摄像头:罗技 C270(720P) Linux源码:2016_R1 Linaro文件系统:linaro-vivid-developer-20150618-705.tar.gz QT库...


iOS开源:CBPic2ker - 图片选择,不但酷而且美还支持人脸识别

效果 特性 酷 给你丝滑的美 人脸识别 版本要求 iOS 8.0 安装 CBPic2ker 已经支持了CocoaPods. 只要在你的 Podfile 文件中添加下面的语句即可: pod "CBPic2ker" 不要忘记在info.plist文件中添加描述: 使用...


iOS开源:iOSPalette-图片精确提取主色调算法

Objective-C版本的Google Palette算法在Java.A工具中提取了一个图像的主要颜色。与传统的算法相比,iOSPalette可以帮助您提取更有可能成为“主色”的主色。它不是 总是像素数中最大的。 2.Why iOS-...


如何打造易扩展的高性能图片组件

内容提要 图片组件可以说是app开发中使用最多的组件之一,它既简单也不简单,如何设计和开发一个具有高扩展性,高性能的图片组件呢?本次分享将会从架构设计到性能优化等多方面,全...


如何写出一个丝滑的图片浏览器

那时,我想要一个这样的图片浏览器: 从小图进入大图浏览时,使用转场动画 可加载网络图片,且过渡自然,不阻塞操作 可各种姿势玩弄图片,且过渡自然,不阻塞操作 可以在往下拉时,...


老司机出品—疯狂造轮子之图片异步下载类

SDWebImage,我估计没有一个做iOS的不知道这个三方库吧,他为我们提供了简洁的图片异步下载方式。在他为我一句api带来这么大便利的同时,你有没有想过他是怎么实现的呢?让我们先来看看...


Android多图选择器 图片/视频 单选or多选,以及视频录制

最近项目中用到多图选择上传的需求,考虑到android机型众多问题就自己花时间写了一个,测试了大概60款机型,出现过一些问题也都一一修复了,基本上稳定了特分享出来,界面UI也是商用级...


Python:图片转字符画

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


OpenCV: 图片人脸识别

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