相册选择图片并给图片添加水印后上传到服务器
2015-12-03 本文已影响930人
DestinyFighter_
�记录一下最近在做的项目中的一个功能,功能需求如下:

产品要求是用户可以从手机相册里选择一张照片,然后得到这张照片的拍摄时间和拍摄地点,然后以文字水印的方式添加到照片上,然后上传到服务器.界面的问题就不做说明了,主要说下业务逻辑.
1.打开手机相册,并选取图片.首先要遵守协议:UIImagePickerControllerDelegate 和 UINavigationControllerDelegate.

2.然后实现完成选择图片的代理方法,在此方法里获取图片的信息,地址这里获取到的是经纬度,需要进行反地理编码.

取消选择图片的代理方法:

3.因为图片的地址是异步获取的,因此我在这里添加了一个观察者来监视 address 的变化,如果获取不到地址则只打印日期.当然要记得在 dealloc 的时候把观察者移除.


4.由于手机拍摄的照片都比较大,一般2~3M,我们在这里做一个压缩图片的处理,方便后面快速上传图片到服务器.�以下代码的作用是等比例压缩.

而我们产品的要求是上传图片的大小要保持在200K以内,因此我想到了一个动态压缩的方案,即根据图片的大小来动态改变压缩系数,将上面的代码换成如下代码:

5.然后就是把获取到的图片信息以文字水印的形式显示在图片上,可以任意调整水印的位置,字体,颜色等.

6.保存加过水印的图片到本地沙盒中,路径相同的文件会覆盖保存,后面上传的时候会通过路径找到相应文件.

7.由于我这里还有一个删除选择过的图片的功能,因此还要有删除沙盒中文件的方法.

8.以字典的形式将图片路径和文件名上传.

工具类内网络请求封装方法如下:

这样就上传成功了.
最后上一张昨天拍的公司园区内一个土豪的座驾.
