通過(guò)rust實(shí)現(xiàn)自己的web登錄圖片驗(yàn)證碼功能
在進(jìn)行web系統(tǒng)開(kāi)發(fā)時(shí),為保障系統(tǒng)登錄安全,登錄頁(yè)面中的驗(yàn)證碼必不可少。在java中,我們可以利用相應(yīng)的2D圖像庫(kù)快速生成圖形驗(yàn)證碼,而對(duì)于rust,我們沒(méi)有合適的標(biāo)準(zhǔn)庫(kù)進(jìn)行圖像驗(yàn)證碼的生成。今天,我們通過(guò)使用image crate,通過(guò)rust生成圖像驗(yàn)證碼。
一、加入依賴(lài)
我們通過(guò)cargo,在我們的項(xiàng)目中引入image依賴(lài)。

我們查看項(xiàng)目中的Cargo.toml文件,可以看到我們加入了image crate依賴(lài)。
[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"
二、生成純色圖片
通過(guò)代碼生成一個(gè)長(zhǎng)80,高25的純色圖片。
let img2 = RgbImage::from_pixel(80, 25, Rgb([226,226,240]));
img2.save("codeimage.jpg").expect("jpg save failed");我們查看生成的圖片信息:

我們?cè)偻ㄟ^(guò)代碼生成四分之一長(zhǎng),高度也為25的純色圖片,用來(lái)存儲(chǔ)我們的驗(yàn)證字母和數(shù)字。
let img2 = RgbImage::from_pixel(20, 25, Rgb([226,226,240]));
img2.save("A.jpg").expect("jpg save failed");三、編輯驗(yàn)證圖片
通過(guò)翻閱image crate的依賴(lài)庫(kù),尚未發(fā)現(xiàn)直接在圖片中寫(xiě)入文字的方法,故本人通過(guò)手工添加26個(gè)字符和10個(gè)數(shù)字的方式,完成隨機(jī)字母和數(shù)字圖片的編輯。

四,隨機(jī)函數(shù)編寫(xiě)
我們通過(guò)編寫(xiě)一個(gè)隨機(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)證碼圖片
我們通過(guò)循環(huán)獲取驗(yàn)證字符,并通過(guò)拼接字符圖片到我們的驗(yàn)證碼圖片,最終生成我們需要的驗(yàn)證碼圖片。
pub fn ge_code_img(){
//生成一個(gè)寬度為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)于通過(guò)rust實(shí)現(xiàn)自己的web登錄圖片驗(yàn)證碼功能的文章就介紹到這了,更多相關(guān)rust web登錄圖片驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust語(yǔ)言之使用Polar權(quán)限管理方法詳解
權(quán)限管理 (Permission Management) 是一個(gè)涵蓋了系統(tǒng)或網(wǎng)絡(luò)中用戶權(quán)限控制和管理的系統(tǒng),本文將詳細(xì)給大家介紹Rust語(yǔ)言中如何使用Polar權(quán)限管理,需要的朋友可以參考下2023-11-11
使用Cargo工具高效創(chuàng)建Rust項(xiàng)目
這篇文章主要介紹了使用Cargo工具高效創(chuàng)建Rust項(xiàng)目,本文有關(guān)Cargo工具的使用和Rust輸入輸出知識(shí)感興趣的朋友一起看看吧2022-08-08
為什么要使用 Rust 語(yǔ)言、Rust 語(yǔ)言有什么優(yōu)勢(shì)
雖然 Rust 是一種通用的多范式語(yǔ)言,但它的目標(biāo)是 C 和 C++占主導(dǎo)地位的系統(tǒng)編程領(lǐng)域,很多朋友會(huì)問(wèn)rust語(yǔ)言難學(xué)嗎?rust語(yǔ)言可以做什么,今天帶著這些疑問(wèn)通過(guò)本文詳細(xì)介紹下,感興趣的朋友一起看看吧2022-10-10
Rust 標(biāo)準(zhǔn)庫(kù)的結(jié)構(gòu)及模塊路徑詳解
在 Rust 中,標(biāo)準(zhǔn)庫(kù)提供了一組核心功能,以幫助開(kāi)發(fā)者執(zhí)行常見(jiàn)的編程任務(wù),這個(gè)路徑樹(shù)可以作為參考,幫助你更好地理解 Rust 標(biāo)準(zhǔn)庫(kù)的結(jié)構(gòu)和模塊之間的關(guān)系,本文介紹 Rust 標(biāo)準(zhǔn)庫(kù)的結(jié)構(gòu),并提供相應(yīng)的 use 路徑,感興趣的朋友一起看看吧2024-05-05

