目标是使用 crate qrcode
生成二维码,并立即将其作为png
文件发送,以便使用actix-web下载
到目前为止,我有:
let qr = QrCode::new(&format!("http://example.com/{}", &link_id)).unwrap();
let png: ImageBuffer<Luma<u8>, Vec<u8>> = qr.render::<Luma<u8>>().build();
其中包含qrcode。我可以使用.save()
方法将其保存到文件中。但是理想情况下,我不会承担这些开销,而是立即发送文件。但是我无法将正确的数据传递给actix-web
。我尝试了以下方法,这些方法可以编译,但只会发送无法查看的错误图像:
HttpResponse::Ok()
.set(ContentType::png())
.body(Bytes::from(png.into_raw()))
最佳答案
像这样:
let qr = QrCode::new("http://example.com/xyz").unwrap();
let png: ImageBuffer<Luma<u8>, Vec<u8>> = qr.render::<Luma<u8>>().build();
let mut w = Cursor::new(Vec::new());
DynamicImage::ImageLuma8(png)
.write_to(&mut w, ImageOutputFormat::Png)
.unwrap();
let vec = w.into_inner();
// vec now contains the PNG bytes
关于rust - 我如何从图像::ImageBuffer到actix_web::HttpResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66085977/