如题所示,本文要解决的问题就是rust方面的涉及到图片转base64码或base64码保存为图片的问题。
一、需要的库
[dependencies]
image="*"
base64="*"
image-base64="*"
二、打开本地图片转为base64后再保存图片
fn openpic_tobase64_tosave_pic(){
let pic_path = "src/ok.jpg";
let base64_string= image_base64::to_base64(pic_path);
let mygetbase64str=base64_string.split(",").nth(1).unwrap();//获取base64编码逗号右边的有效串
let picformat = match base64_string.as_str(){
v if v.contains("gif") =>{ImageFormat::Gif},
v if v.contains("jpeg") =>{ImageFormat::Jpeg},
v if v.contains("png") =>{ImageFormat::Png},
_ => panic!("Invalid image type."),
};
let bytes = base64::decode(&mygetbase64str).expect("解码Base64字符串发生异常。");
//let format = ImageFormat::Jpeg;//此处的类型务必与图片文件拓展名保存一致。
let img = load_from_memory_with_format(&bytes, picformat).expect("图像解码异常。");
let mut file = BufWriter::new(File::create("output.png").unwrap());
img.write_to(&mut file, picformat).expect("图像保存发生异常。");
println!("已成功保存图片!");
}
三、通过获取前端的base64保存为图片
fn getwebbase64_tosave_pic(){
let base64_string="data:image/gif;base64,R0lGODlhpAGkAfYAAAA……";
let mygetbase64str=base64_string.split(",").nth(1).unwrap();//获取base64码逗号右边的有效串
let bytes = base64::decode(&mygetbase64str).expect("解码Base64字符串发生异常。");
//let bytes = base64_string.as_bytes().to_vec();//类型一致,但是这个就是不行
let picformat = match base64_string{
v if v.contains("gif") =>{ImageFormat::Gif},
v if v.contains("jpeg") =>{ImageFormat::Jpeg},
v if v.contains("png") =>{ImageFormat::Png},
_ => panic!("Invalid image type."),
};
let img = load_from_memory_with_format(&bytes, picformat).expect("图像解码异常。");
let mut file = BufWriter::new(File::create("output.png").unwrap());
img.write_to(&mut file, picformat).expect("图像保存发生异常。");
println!("已成功保存图片!");
}