Android-圖片驗證碼生成
1、為啥要驗證碼?
圖片驗證碼在網絡中使用的是比較普遍的。一般都是用來防止惡意破解密碼、刷票、論壇灌水、刷頁等。
2、怎樣的驗證碼比較好?
驗證碼的獲取方式無非就兩種,一種是后台提供一個接口,返回圖片的地址和驗證碼,然后你去請求驗證碼再顯示出來。另一種是直接的在本地生成驗證碼。后台提供的話,肯定對前端開發人員來說方便很多,拿到直接使用,而對於用戶來說就不怎么好了。一張驗證碼最少要請求兩次網絡,如果網絡不好,驗證碼加載就會很慢,如果驗證碼看不清,那就再加載一次,那就呵呵了,所以,本地實現雖然相對來說略顯麻煩,但好處是比較明顯的,除非項目緊急,讓后台那邊生成。除此以外還是前端生成比較靠譜。
生成驗證碼的步驟
1、既然要畫,肯定要畫布canvas和畫筆paint。
2、底色,背景,根據需要可以對驗證碼的背景顏色進行不同的繪制,這里采用灰色
3、畫驗證碼,這步就比較復雜了,畫Text在Android中是這樣的,drawText()方法中傳進去的X、Y的坐標指的是字的左下角的坐標,也就是說,如果畫A,那么坐標點是A的左下角,但畫g,那就是g的上半部分圓的左下角。不滿足的還可以加點料,畫傾斜的驗證碼。
如下圖所示(紅線交叉點):不明白的可以參考這里

4、驗證碼畫完就畫干擾線和干擾點。
<這里需要注意的是:畫字母的時候,要注意順序,不然如果你畫的是ABCD,結果畫出來是ACDB,這樣,驗證碼就沒意義了。>
基本上畫驗證碼的步驟就是上面幾個了。
完整的項目代碼:

代碼里面注釋比較詳細了,這里就不再解釋。看完基本都懂。這個實例代碼只有干擾線,而沒有畫干擾點了,需要完善的可以自己加上去,還有對於字體,還可以來個傾斜等,各位自己完善吧,此栗子僅供參考!
改如何使用?

上一句紅底的是獲取驗證碼圖片。下面的那句是獲取驗證碼。
我這里取的都是默認值,如果你要自己設置寬高,字體顏色等就要先獲取CaptchaImageUtil對象,然后再設置,最后才是調用createCodeImage(),如果先創建后設置的話,用腳趾甲想想都可以明白這樣是無效的。如果刷新驗證碼,就直接調用createCodeImage()即可。
最后看看效果圖:

end
2016-10-25