我正在使用Pistonimage包来生成图像。
fn get_image() -> image::DynamicImage {
    image::DynamicImage::ImageRgba8(image::ImageBuffer::new(512, 512))
}
我有一个hyper网络服务器,我想从中提供动态生成的图像。
基于如何在 Rust 中创建可用作读取器或写入器的内存中对象的答案?,我想我可以使用 aCursor<Vec<u8>>作为目的地。但是,image似乎只提供了一种写入文件名的方法,而不是Writer像我的光标那样。
在查看了image的文档后,我希望可能有某种方法可以直接使用该image::png::PNGEncoder结构。它提供了一个公共方法encode(self, data: &[u8], width: u32, height: u32, color: ColorType) -> Result<()>。但是,我不确定data参数应该是什么,而且我找不到 .s 使用的ColorTypes 的任何公共声明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 等格式并在内存中获取结果?
Run Code Online (Sandbox Code Playgroud)fn getImage() -> image::DynamicImage
你有一个DynamicImage。
图像似乎只提供了一种写入文件名的方法
我假设你的意思是DynamicImage::save。
之前的方法save是write_to:
pub fn write_to<W: Write, F: Into<ImageOutputFormat>>(
    &self, 
    w: &mut W, 
    format: F
) -> ImageResult<()>
这接受任何通用编写器:
let mut buf = Vec::new();
get_image()
    .write_to(&mut buf, image::ImageOutputFormat::PNG)
    .expect("Unable to write");
没有必要一个Cursor.
如何将活塞编码
GenericImage为 PNG 等格式?
我不知道最好的方法来做到这一点。我可能会将通用图像复制到 a 中DynamicImage,然后按照上述说明进行操作。