http://blog.sina.com.cn/s/blog_7d35fa1a0101i5op.html

有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。可以使用UIKit的这个类方法来完成。

1 2 3 4 5 6
void UIImageWriteToSavedPhotosAlbum ( UIImage *image, idcompletionTarget, SEL completionSelector, void *contextInfo );

image
要保存到用户设备中的图片

completionTarget
当保存完成后,回调方法所在的对象

completionSelector
当保存完成后,所调用的回调方法。 形式如下:

1 2 3
- (void) image: (UIImage *) image didFinishSavingWithError: (NSError *)error contextInfo: (void *) contextInfo;

contextInfo
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。

比如你可以这样来写一个存贮照片的方法:

1 2 3 4 5
// 要保存的图片 UIImage *img = [UIImage imageNamed:@"ImageName.png"]; // 保存图片到相册中UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

回调方法看起来可能是这样:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError*)error contextInfo:(void *)contextInfo { // Was there an error? if(error != NULL) { // Show error message... } else // No errors { // Show message image successfully saved } }

为什么图片会存不进iOS的相册?

不知道大家有没有遇到这样的情况,收到一封带几张图片附件的email,高高兴兴点击“存储x幅图片”,跑到相册准备欣赏却发现只有一张半张(坏掉了)。再存,发现还是一样的毛病。心想可能是相册满了吧,可是清空了相册还是没有改善,于是就觉得不会是手机坏了吧?是邮箱或者网络偶尔出毛病吧?
其实都不是,批量存图会让iphone或者ipad运行不过来,上一张还没存好,下一张存图任务又来了,这时候系统就会报告忙而存储失败。
怎么解决呢?如果那个软件没有做一张一张存图的功能那就没法解决。比如邮箱里的照片存不成功只能一张张存或者看rp咯~~~如果非要批量存储就得开发者来改善了。以下为码农时间:
通常在使用UIImageWriteToSavedPhotosAlbum时都是只给image一个参数,其它设为nil,所以有没有错也不知道,无声无息就存了。为了看出了什么错,得给它写成这样

UIImageWriteToSavedPhotosAlbum(saved, self,@selector(image:didFinishSavingWithError:contextInfo:), nil);
然后去自己按照UIImageWriteToSavedPhotosAlbum要求格式写的
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 里看 NSLog(@"%@", error)运行出来是什么。

(代码参考这里Image cannot be saved using UIImageWriteToSavedPhotosAlbum to photo album)

我在xcode得到的错误信息:
Error Domain=ALAssetsLibraryErrorDomain Code=-3301 "写入正忙" UserInfo=0x741fc10 {NSLocalizedFailureReason=写入此资产时出现问题,因为写入资源正忙。, NSLocalizedRecoverySuggestion=, NSLocalizedDescription=写入正忙}
参考代码里面得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3304 "Failed to encode image for saved photos." UserInfo=0x7857630 {NSUnderlyingError=0x7851f20 "Failed to encode image for saved photos.", NSLocalizedDescription=Failed to encode image for saved photos.}
还有位仁兄得到的是:
Error Domain=ALAssetsLibraryErrorDomain Code=-3310 "Data unavailable" UserInfo=0x593bf10 {NSLocalizedRecoverySuggestion=Launch the Photos application, NSLocalizedDescription=Data unavailable}
大家同病相怜~
故障就出在UIImageWriteToSavedPhotosAlbum把图片存到相册不是瞬间的,会经过一段计算时间,若不管它的疾苦死命调用它就会造成存储失败,最后存了等于没存。还会令任务队列阻塞,特别是会让UI消息得不到及时响应,那就糟糕了!
解决方法参考这里(Save multiple wallpapers to Photos Album, UIImageWriteToSavedPhotosAlbum)。它把前因后果讲得很清楚(我前面啰嗦的那些丷丷),还给出了一堆没有排版好的代码(很有用哦!)中心思想摘录如下:

The solution is to copy photos one by one:
解决办法是一张一张拷贝图片:

  1. create an array of image names, e.g. wallpapers
    开一个图片array
  2. copy one
    拷贝一个
  3. catch complete selector
    存完进入到didFinishSavingWithError
  4. goto #2
    从第二步继续到存完所有图

当然每个软件都有不同的存储流程,第一步开一个array会非常耗内存,我在CamDiary里面是:

  1. 生成一张图
  2. 存图UIImageWriteToSavedPhotosAlbum
  3. 等待进入didFinishSavingWithError
  4. 从第一步继续到存完所有图

记住这句话:UIImageWriteToSavedPhotosAlbum 单用靠不住,didFinishSavingWithError 结合有出路。

有时候你的应用需要将应用中的图片保存到用户iPhone或者iTouch的相册中。 可以使用UIKit的这个类方法来完成。

1
2
3
4
5
6
void UIImageWriteToSavedPhotosAlbum (UIImage  *image,id       completionTarget,SEL      completionSelector,void     *contextInfo
);

image
要保存到用户设备中的图片

completionTarget
当保存完成后,回调方法所在的对象

completionSelector
当保存完成后,所调用的回调方法。 形式如下:

1
2
3
- (void) image: (UIImage *) imagedidFinishSavingWithError: (NSError *) errorcontextInfo: (void *) contextInfo;

contextInfo
可选的参数,保存了一个指向context数据的指针,它将传递给回调方法。

比如你可以这样来写一个存贮照片的方法:

1
2
3
4
5
// 要保存的图片UIImage *img = [UIImage imageNamed:@"ImageName.png"];  // 保存图片到相册中UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

回调方法看起来可能是这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{// Was there an error?if (error != NULL){// Show error message...}else  // No errors{// Show message image successfully saved}}

iphone UIImageWriteToSavedPhotosAlbum 保存图片相关推荐

  1. ios(iphone/ipad)开发每日一练【2011-11-14】

    请教一个关于真机测试的问题 疼!向各位老大求解cocos2d 处理动作播放的问题 如何实现新版本的升级提醒啊 UIImagePickerController截图时图片不再截图框中间 self有什么技巧 ...

  2. iOS下载JPG图片会被压缩问题

    最近做项目,发现服务器上原先100多K的图片,在iOS应用中下载下来保存只有几十K,检查了代码,并没有对图片进行任何压缩.图片格式是JPG.后面查了资料,有如下答案. UIImageWriteToSa ...

  3. Swift封装图片浏览,多张图片浏览,缩放,gif图片的播放

    封装了一个图片浏览器,实现了图片的浏览,缩放,支持多张图片的浏览缩放,保存到相册等功能 实现功能 1.图片浏览,根据图片的大小适应,浏览长图 2.多张图片左右滑动浏览 3.图片的缩放 4.播放gif图 ...

  4. XZ_iOS之将图片保存到手机导致崩溃的问题

    使用 UIImageWriteToSavedPhotosAlbum 保存图片崩溃, 且没有出现是否允许 app 读取相册的弹窗 解决思路 : 1> 图片太大导致的,换成本地图片依旧崩溃,说明不是 ...

  5. 安卓手机老是自动保存图片_Redmi K30 Pro自动亮度调节和iPhone基本一致,安卓手机的大进步...

    3月24日Redmi发布了第二台5G性能旗舰手机,这也是它的首台5G旗舰手机,2999元起的价格在3月27日首销当天 30秒全平台销售额破亿,和当时小米10的售卖时的火热程度不分上下,Redmi K3 ...

  6. iphone开发笔记和技巧总结

    在iphone程序中实现截屏的一种方法: //导入头文件   #importQuartzCore/QuartzCore.h //将整个self.view大小的图层形式创建一张图片imageUIGrap ...

  7. iphone完整版的http上传请求协议

    完整版的iphone(XCODE),oc   http上传请求协议,一个完整的DEMO,提供给大家学习 //保存图片 - (void)saveImage { _alertview= [[UIAlert ...

  8. iphone开发中的一些小技

    在iPhone开发过程中,一些小技巧对开发工作有很大的帮助作用,所以以下内容收集了一些开发过程中的小技巧. 1.如果在程序中想对某张图片进行处理的话(得到某张图片的一部分)可一用以下代码:   UII ...

  9. html5长按保存,iOS UIWebView仿微信H5页面实现长按保存图片功能

    最终实现效果图 选择放这张效果图的时候很是忐忑啊,不知道会不会被和谐掉. 拿到需求之后分析了一下,其实主要功能点就是如何才能通过手指按压位置获取到相应的图片资源.是不是很抓狂,如果考虑到设备适配,谁知 ...

  10. iPhone/iOS图片相关(读取、保存、绘制、其它相关)

    一.读取图片 1.从资源(resource)读取 [cpp] view plaincopyprint? UIImage* image=[UIImage imageNamed:@"1.jpg& ...

最新文章

  1. 白话hash和数字签名,保证你看得懂
  2. 使用正则表达式进行高效的测试
  3. 少儿python编程培训-无锡江阴少儿Python编程培训一对一
  4. C/C++中传值和传地址(引用)
  5. LinuxMint(Ubuntu)安装文泉驿家族黑体字
  6. 类加载的双亲委派机制
  7. Zxing二维码重复扫描,不退出。
  8. c语言考试常考大题,C语言题库经典题 考试常考题.doc
  9. Atitit.web的自动化操作与信息抓取 attilax总结
  10. Office Word 使用笔记
  11. S60 v1、v2和v3的区别
  12. 5.1索引压缩-词项的统计特性(Heaps定律、Zipf定律)
  13. element-ui+vue给登录界面创建一个走马灯幻灯片切换
  14. 自适应二次元紫色luo莉资源网emlog模板
  15. 开源框架Volley的使用《一》
  16. 项目需求的重要性和开发步骤
  17. COMP SCI 3013 7089 - Event Driven Computing Semester java
  18. 计算机搜索不到网络扫描仪,XP系统我的电脑找不到扫描仪和摄像头如何解决
  19. 机器越“智能”,数据标注员越容易被淘汰?丨曼孚科技
  20. js中用正则表达式判断字符串中是否包含中文和英文

热门文章

  1. SQL在执行JOIN ON时,到底发生了什么?
  2. 电池革命:固态电池量产还有多远?
  3. 华东理工大计算机专业,华东理工大学计算机专业怎么样(计算机专业大学排名50)...
  4. 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  5. 做微商的朋友们都想知道代购怎么在闲鱼上引流?
  6. 阿里云服务器ECS操作系统有哪些版本?
  7. 尚硅谷MySQL基础学习笔记
  8. java中解耦合_简单分析程序中耦合和解耦合
  9. vba ado 连接mysql_Excel VBA 自定义类(ADO)连接数据库
  10. 如何将PDF转换成word文档