进阶篇第九期:相册与拍照的后处理
在中级篇里面,已经介绍过相册与拍照的简单使用了,那么接下来我们就来讲一讲它们的后续处理,到底应该怎么做才好呢
首先我们先来讲拍照
还是那个点击使用照片后调用的代理方法中,我们来做以下代码中所提到的事情
- (void)p_w_picpathPickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {[picker dismissViewControllerAnimated:YES completion:NULL];NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType];UIImage *newImage;WS(weakSelf);if ([mediaType isEqualToString:@"public.p_w_picpath"]) {UIImage *originImage = [info objectForKey:UIImagePickerControllerOriginalImage];dispatch_sync(dispatch_get_global_queue(0, 0), ^{[weakSelf saveImageToPhotos:originImage];});newImage = [self scaleImage:originImage toScale:0.1];}[_p_w_picpathArray addObject:newImage];
}
这个时候,从里面取出的图片是原图,毕竟尺寸、占用内存都比较大,我们需要进行剪切来优化它
-(UIImage *)scaleImage:(UIImage *)p_w_picpath toScale:(float)scaleSize {UIGraphicsBeginImageContext(CGSizeMake(p_w_picpath.size.width*scaleSize,p_w_picpath.size.height*scaleSize));[p_w_picpath drawInRect:CGRectMake(0, 0, p_w_picpath.size.width * scaleSize, p_w_picpath.size.height *scaleSize)];UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return scaledImage;
}
当然了,原图我们也是需要保存到相册里面的,所以我们的保存方法如下
- (void)saveImageToPhotos:(UIImage *)savedImage {UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(p_w_picpath:didFinishSavingWithError:contextInfo:), nil);
}- (void)p_w_picpath:(UIImage *)p_w_picpath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {NSString *message = nil;if (error) {message = @"保存失败";} else {message = @"保存成功";[self getAssetsLastPhoto];}NSLog(@"%@", message);
}
这就是拍照后续的使用了,如果还需要优化的话,那就要看你们的产品以及后台如何制定方案了
接下来我们来讲一讲相册吧
最常用的就是我们需要调用一个方法,将所有的照片都取出来,这里要注意的一点是,我们只要缩略图以及原图URL地址就可以了,因为它们两个还是比较重要的
- (void)loadAssets {// Initialise_assets = [NSMutableArray new];_assetLibrary = [[ALAssetsLibrary alloc] init];// Run in the background as it takes a while to get all assets from the librarydispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSMutableArray *assetGroups = [[NSMutableArray alloc] init];NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];// Process assetsvoid (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {if (result != nil) {if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {[assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];NSURL *url = result.defaultRepresentation.url;[_assetLibrary assetForURL:urlresultBlock:^(ALAsset *asset) {if (asset) {@synchronized(_assets) {[_assets addObject:asset];if (_assets.count == 1) {// Added first asset so reload data// [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];}}}}failureBlock:^(NSError *error){NSLog(@"operation was not successfull!");}];}}};// Process groupsvoid (^ assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {if (group != nil) {[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:assetEnumerator];[assetGroups addObject:group];}};// Process![self.assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:assetGroupEnumeratorfailureBlock:^(NSError *error) {NSLog(@"There is an error");}];});}
在显示缩略图的地方,我们可以显示缩略图,而在显示原图的地方,我们也可以根据URL显示原图
@synchronized(_assets) {NSMutableArray *copy = [_assets copy];for (ALAsset *asset in copy) {[photos addObject:[MWPhoto photoWithThumbImage:[UIImage p_w_picpathWithCGImage:asset.thumbnail] URL:asset.defaultRepresentation.url]];}}
上面的方法,就是加入原图的缩略图以及地址URL,这里我用了一个包含两个属性的类来添加,当然你也可以弄两个类来单独添加
另外在上传图片的时候还是需要对原图进行剪切,改变base64,当然还是要看你们服务器那边的方案
好啦,这就是我们对相册以及拍照的后处理咯
就写到这里吧,有什么问题,可以来群里找我哦
转载于:https://blog.51cto.com/neusoftios/1650050
进阶篇第九期:相册与拍照的后处理相关推荐
- 随心篇第九期:我不愿一无所有
这周项目组的小组长找我单独聊了天,聊的是关于我们这个项目组未来的趋势,毕竟我们这个项目组只有技术的同事是我们一个组的,其余的同事都是另几个组的,现在要合并成一个大组 听起来还不错,毕竟这个项目组还是蛮 ...
- [Python公开课]零基础玩转Python进阶篇----第九节:Python的异常分析及解决
- Android进阶之路 - 解决部分手机拍照之后图片被旋转的问题
这几天犯了一个错误,初期想着甩锅给后台的- 但还好及时发现了是自身的问题~ 关联文章 Android基础进阶 - 调用拍照.获取图片(基础) Android基础进阶 - 获取.调用相册内图片(基础) ...
- mysql 统计 打卡数据_第九期30天打卡赠书和红包活动,今天正式启动!
点击上方"程序IT圈",选择"置顶公众号" 每天准时进来打卡留言哈! 公众号第九期打卡,由于春节假期,又不幸遇上突发疫情,导致了打卡活动一再推迟,今天终于可以正 ...
- SQL Server调优系列进阶篇(如何维护数据库索引)
前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...
- C++语言程序设计视频教程_清华大学_郑莉(基础篇+进阶篇)
C++语言程序设计视频教程_清华大学_郑莉(基础篇) 第一章:绪论 1.1 导学 1.2 计算机系统简介 1.3计算机语言和程序设计方法的发展 1.4 面向对象的基本概念 1.5 程序的开发过程 1. ...
- OpenCV进阶篇视频
OpenCV进阶篇01 第14章 视频处理 OpenCV不仅能够处理图像,还能够处理视频.视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取.这样,就能够使用图像处理的方法对这些图像进行处 ...
- [安全攻防进阶篇] 六.逆向分析之OllyDbg逆向CrackMe01-02及加壳判断
前文作者讲解了OllyDbg和在线沙箱的逆向分析过程,分享了恶意软件如何通过宏脚本发送勒索信息或密码至用户邮箱.这篇文件将带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原,基础性文章,希 ...
- [安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向
从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...
- [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...
最新文章
- 笔记 | 深入理解深度学习语义分割
- 2020秋季-人工神经网络课程报告
- a标签中href=javacript:; href=javacript:void(0); href=#区别
- 8.公有继承 保护继承 私有继承
- ab753变频器参数怎么拷贝到面板_技术贴:100吨连铸安川变频器的更换
- 你的安全设置不允许在您的计算机,你的安全设置不允许网站使用安装在你的计算机上的ActiveX控件...
- java web与android互通的aes算法
- IIS 7.0 安装SSL证书过程
- 火狐浏览器工具栏/折叠菜单怎么设置?火狐浏览器工具栏/折叠菜单定制教程
- HDU 4115 Eliminate the Conflict(2-sat)
- ArcGIS API 离线字体库加载及跨域问题解决
- android 批量保存网页图片大小,360浏览器看图模式 一键保存“高清套图”
- 三茗硬盘保护系统安装Linux,重装windows系统而不影响linux引导的方法
- 以大TMS运输配送管理系统
- linux国际象棋,国际象棋通用引擎协议
- 大厂“P8/P9”必读《成为思维高手》pdf 电子书下载
- Zigbee基础理论知识总结
- 【Java】Java中Pair的使用
- BZOJ3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
- 一些关于vim的入门资料
热门文章
- python服务端开发调试日志系统_Loglog首页、文档和下载 - 基于 Python2.7 的日志系统 - OSCHINA - 中文开源技术交流社区...
- chpater 2 : InnoDB存储引擎
- 数值计算详细笔记(二):非线性方程解法
- HDU1317 —— 最长路+判断正环
- PyQt5 the application failed to start because no Qt platform could be initialized
- JDK11使用HSDB
- win7计算机自动关机设置在哪里设置方法,win7怎么设置自动关机【详细步骤】
- python樱花树画法图片_武大樱花又盛开,用Python画一棵樱花树
- 【转】基于nginx + lua实现的反向代理动态更新
- 【转】keil5 missing close quote 错误解决