汽车用品网站建设,已申请域名怎么做网站,外贸做的亚马逊网站是哪个,成都网站建设服务在进行web系统开发时#xff0c;为保障系统登录安全#xff0c;登录页面中的验证码必不可少。在java中#xff0c;我们可以利用相应的2D图像库快速生成图形验证码#xff0c;而对于rust#xff0c;我们没有合适的标准库进行图像验证码的生成。今天#xff0c;我们通过使用… 在进行web系统开发时为保障系统登录安全登录页面中的验证码必不可少。在java中我们可以利用相应的2D图像库快速生成图形验证码而对于rust我们没有合适的标准库进行图像验证码的生成。今天我们通过使用image crate通过rust生成图像验证码。
一、加入依赖 我们通过cargo在我们的项目中引入image依赖。 我们查看项目中的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的纯色图片用来存储我们的验证字母和数字。 let img2 RgbImage::from_pixel(20, 25, Rgb([226,226,240]));img2.save(A.jpg).expect(jpg save failed);
三、编辑验证图片 通过翻阅image crate的依赖库尚未发现直接在图片中写入文字的方法故本人通过手工添加26个字符和10个数字的方式完成随机字母和数字图片的编辑。 四随机函数编写 我们通过编写一个随机获取我们指定字符的函数为后续随机生成验证图片提供支持。
fn ge_code_char()- char{let mut rng rand::rng();let s ABCDEFGHJKLMNPRSTUVWXYZ0123456789;s.chars().choose(mut rng).unwrap()
}
五生成验证码图片 我们通过循环获取验证字符并通过拼接字符图片到我们的验证码图片最终生成我们需要的验证码图片。
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);
} 我们运行函数验证随机验证码图片是否生成 第一次 第二次 至此我们的图片验证码程序完成