有关ios中图片的处理

让我在公司搞了整整五天的问题啊!!!!

我知道的apple提供的操作相册总共有两种方式:UIImagePickerController和ALAssetsLibrary(有第三种方式欢迎第一时间告诉我啊!!!)。

UIImagePickerController就是调用系统提供的相册,好在方便直接几个代理就搞定,想要的信息也能获取到,不过就是界面丑了点,因为是系统提供的相册没办法改UI,都是封装好的,不过好在方便。

ALAssetsLibrary我感觉就很反人类了,它只是提供了相册、图片的信息,可以取出图片缩略图、全屏图和原图之类的,想要获取大小写文件等等都是能够完成,好处就是界面随你编,UI不会搞死你。不过很反人类的是截取出来的url很蛋疼,只能用ALAssetsLibrary根据url取图片,想用imagewithurl之类的方法取图片操作 啥的做不到,(因为不是真实地址啊)。而且是block块编程,我很不熟练,要注意的是相册操作完之后就会自动关闭了,就是程序块执行完你再根据url啥都拿不到。

再谈谈ios里面图片的操作,首先说一下一张图片一次放到内存里有多大空间

                      长 * 宽 * 字节数 / (1024 * 1024) = 所占内存

长宽的单位是像素,一般jpg格式的图片一个像素占3-4个字节,png是4个字节,一个6M的图片,大概是14000*8000个像素,内存就是占了约400M哦!! 瞬间内存大的惊人。(友情提示下,如果你把png的文件扩展名改为jpg其实文件还是png格式 只是给你显示是jpg而已,用二进制打开就可以看的很清楚)。

然后看看我知道的几种图片操作方式:UIImage、UIImageCreateRef(好像是,mac没在手里大家自己查),再就是ImageMagick(很老的一个库)。

用UIimage是将图片一次全部拿到内存里,根据刚才的算法,一张图很容易造成真机假重启,比如touch和4,4s也没好多少。不过UIimage给的接口很多,操作真是很方便,就算是用后两种方法说不定也要最后转换成UIimage。

UIImageCreateRef虽然用的不多,但是也算是比较方便的一种,在生成时option选项可以选择几个参数,利用imagesourceref(大概是这个)可以指定文件源,datasource和imagesource都行。根据这个方法可以直接生成缩略图,6M多的图片指定变长1000多就会很小(我用的时候指定边长参数失效直接取原图,不知道为啥)。不过说明文档不太容易读,挺恶心的。注意的是ref结尾的变量用完之后要手动release,即使你程序使用了arc。

最后就是imagemagick了。这是一个很神奇的库,乱七八糟什么平台都有。是一个纯C的库,我用的那个头文件里面300多行,全是函数,一个注释没有一个参数说明没有。好像就是为了解决3gs内存太小的问题,可以对图片进行乱七八糟各种神奇的操作。可以指定资源限制,比如内存限制,超过你限制的内存就直接全部文件放到缓存里,结果就是即使那张6M的图也可以读出来,不过凡事是有代价的,他的代价就是时间。读取文件+resize的时间难以忍受。可以看到源码,但是一个注释说明文档文字都看不到。而且由于是纯C库,而且头文件命名都是短文件名使得引入到你的工程里非常麻烦。不过方法非常多,要是能研究明白使用方法都非常牛逼!!!!

再提一下就是处理相机图片的时候要注意坐标系,相机的图片和手机的坐标系不一样,容易发生图片倾斜之类的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值