我正在使用Pistonimage
包生成图像。
fn get_image() -> image::DynamicImage {
image::DynamicImage::ImageRgba8(image::ImageBuffer::new(512, 512))
}
我有一个hyper
网络服务器,我想从中提供动态生成的图像。
基于如何在 Rust 中创建可用作 Reader 或 Writer 的内存对象的答案?,我想我也许可以使用 aCursor<Vec<u8>>
作为目的地。但是,image
似乎只提供了一种写入文件名的方法,而不是Writer
像我的光标。
在查看了image
的文档后,我希望可能有一些方法可以直接使用该image::png::PNGEncoder
结构。它提供了一个公共方法encode(self, data: &[u8], width: u32, height: u32, color: ColorType) -> Result<()>
。但是,我不确定该data
论点应该是什么,并且我找不到ColorType
. 使用的 s 的任何公开声明ImageBuffer
。
(&Get, "/image.png") => {
let v = {
let generated = get_image();
let mut encoded_image = Cursor::new(Vec::new());
let (width, heigth) = generated.dimensions();
{
let encoder = image::png::PNGEncoder::new(&encoded_image);
encoder.encode(unimplemented!("what goes here?"));
}
encoded_image.get_mut()
};
Box::new(futures::future::ok(
Response::new()
.with_header(ContentLength(v.len() as u64))
.with_body(v.clone()),
))
}
如何将活塞编码为GenericImage
PNG 等格式并将结果存储在内存中?