通過rust實(shí)現(xiàn)自己的web登錄圖片驗(yàn)證碼功能
在進(jìn)行web系統(tǒng)開發(fā)時,為保障系統(tǒng)登錄安全,登錄頁面中的驗(yàn)證碼必不可少。在java中,我們可以利用相應(yīng)的2D圖像庫快速生成圖形驗(yàn)證碼,而對于rust,我們沒有合適的標(biāo)準(zhǔn)庫進(jìn)行圖像驗(yàn)證碼的生成。今天,我們通過使用image crate,通過rust生成圖像驗(yàn)證碼。
一、加入依賴
我們通過cargo,在我們的項(xiàng)目中引入image依賴。
我們查看項(xiàng)目中的Cargo.toml文件,可以看到我們加入了image crate依賴。
[package] name = "app-web1" version = "0.1.0" edition = "2021" [dependencies] actix-files = "0.6.6" actix-web = "4.9.0" captcha = "0.0.9" image = "0.25.5" oracle = "0.6.3" rand = "0.9.0" serde = "1.0.218"
二、生成純色圖片
通過代碼生成一個長80,高25的純色圖片。
let img2 = RgbImage::from_pixel(80, 25, Rgb([226,226,240])); img2.save("codeimage.jpg").expect("jpg save failed");
我們查看生成的圖片信息:
我們再通過代碼生成四分之一長,高度也為25的純色圖片,用來存儲我們的驗(yàn)證字母和數(shù)字。
let img2 = RgbImage::from_pixel(20, 25, Rgb([226,226,240])); img2.save("A.jpg").expect("jpg save failed");
三、編輯驗(yàn)證圖片
通過翻閱image crate的依賴庫,尚未發(fā)現(xiàn)直接在圖片中寫入文字的方法,故本人通過手工添加26個字符和10個數(shù)字的方式,完成隨機(jī)字母和數(shù)字圖片的編輯。
四,隨機(jī)函數(shù)編寫
我們通過編寫一個隨機(jī)獲取我們指定字符的函數(shù),為后續(xù)隨機(jī)生成驗(yàn)證圖片提供支持。
fn ge_code_char()-> char{ let mut rng = rand::rng(); let s = "ABCDEFGHJKLMNPRSTUVWXYZ0123456789"; s.chars().choose(&mut rng).unwrap() }
五,生成驗(yàn)證碼圖片
我們通過循環(huán)獲取驗(yàn)證字符,并通過拼接字符圖片到我們的驗(yàn)證碼圖片,最終生成我們需要的驗(yàn)證碼圖片。
pub fn ge_code_img(){ //生成一個寬度為70,高為25的顏色為Rgb([226,226,240]的圖像,并保存為文件 let mut img2 = RgbImage::from_pixel(80, 25, Rgb([226,226,240])); for i in 0..4{ let c = ge_code_char(); let cp = c.to_string()+".jpg"; let img3 = ImageReader::open(cp).expect("open A.jpg failed").decode().expect("decode failed"); img2.copy_from(&(img3.to_rgb8()), i*20, 0).expect("copy from sub img failed!"); } img2.save("codeimage.jpg").expect("jpg save failed"); }
我們運(yùn)行函數(shù),驗(yàn)證隨機(jī)驗(yàn)證碼圖片是否生成:
第一次:
第二次:
至此,我們的圖片驗(yàn)證碼程序完成!
到此這篇關(guān)于通過rust實(shí)現(xiàn)自己的web登錄圖片驗(yàn)證碼功能的文章就介紹到這了,更多相關(guān)rust web登錄圖片驗(yàn)證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust中的方法與關(guān)聯(lián)函數(shù)使用解讀
在Rust中,方法是定義在特定類型(如struct)的impl塊中,第一個參數(shù)是self(可變或不可變),方法用于描述該類型實(shí)例的行為,而關(guān)聯(lián)函數(shù)則不包含self參數(shù),常用于構(gòu)造新實(shí)例或提供一些與實(shí)例無關(guān)的功能,Rust的自動引用和解引用特性使得方法調(diào)用更加簡潔2025-02-02前端基于Rust實(shí)現(xiàn)的Wasm進(jìn)行圖片壓縮的技術(shù)文檔(實(shí)現(xiàn)方案)
在現(xiàn)代Web開發(fā)中,利用Rust編寫的圖片壓縮代碼可以編譯成WebAssembly(Wasm)模塊,Rust的內(nèi)存安全特性和Wasm的跨平臺能力,使得這種方案既高效又安全,對Rust?Wasm圖片壓縮實(shí)現(xiàn)方案感興趣的朋友一起看看吧2024-09-09rust 一個日志緩存記錄的通用實(shí)現(xiàn)方法
本文給出了一個通用的設(shè)計(jì)模式,通過建造者模式實(shí)例化記錄對象,可自定義格式化器將實(shí)例化后的記錄對象寫入到指定的緩存對象中,這篇文章主要介紹了rust 一個日志緩存記錄的通用實(shí)現(xiàn)方法,需要的朋友可以參考下2024-04-04