?記錄一下最近在做的項(xiàng)目中的一個(gè)功能,功能需求如下:
產(chǎn)品要求是用戶可以從手機(jī)相冊里選擇一張照片,然后得到這張照片的拍攝時(shí)間和拍攝地點(diǎn),然后以文字水印的方式添加到照片上,然后上傳到服務(wù)器.界面的問題就不做說明了,主要說下業(yè)務(wù)邏輯.
1.打開手機(jī)相冊,并選取圖片.首先要遵守協(xié)議:UIImagePickerControllerDelegate 和 UINavigationControllerDelegate.
2.然后實(shí)現(xiàn)完成選擇圖片的代理方法,在此方法里獲取圖片的信息,地址這里獲取到的是經(jīng)緯度,需要進(jìn)行反地理編碼.
取消選擇圖片的代理方法:
3.因?yàn)閳D片的地址是異步獲取的,因此我在這里添加了一個(gè)觀察者來監(jiān)視 address 的變化,如果獲取不到地址則只打印日期.當(dāng)然要記得在 dealloc 的時(shí)候把觀察者移除.
4.由于手機(jī)拍攝的照片都比較大,一般2~3M,我們在這里做一個(gè)壓縮圖片的處理,方便后面快速上傳圖片到服務(wù)器.?以下代碼的作用是等比例壓縮.
而我們產(chǎn)品的要求是上傳圖片的大小要保持在200K以內(nèi),因此我想到了一個(gè)動(dòng)態(tài)壓縮的方案,即根據(jù)圖片的大小來動(dòng)態(tài)改變壓縮系數(shù),將上面的代碼換成如下代碼:
5.然后就是把獲取到的圖片信息以文字水印的形式顯示在圖片上,可以任意調(diào)整水印的位置,字體,顏色等.
6.保存加過水印的圖片到本地沙盒中,路徑相同的文件會(huì)覆蓋保存,后面上傳的時(shí)候會(huì)通過路徑找到相應(yīng)文件.
7.由于我這里還有一個(gè)刪除選擇過的圖片的功能,因此還要有刪除沙盒中文件的方法.
8.以字典的形式將圖片路徑和文件名上傳.
工具類內(nèi)網(wǎng)絡(luò)請求封裝方法如下:
這樣就上傳成功了.
最后上一張昨天拍的公司園區(qū)內(nèi)一個(gè)土豪的座駕.