image - 如何对 Rust Piston 图像进行编码并在内存中获取结果?
问题描述
我正在使用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 等格式并将结果存储在内存中?
解决方案
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
,然后按照上述说明进行操作。
推荐阅读
- java - 如何在mockito中匹配具有相同值的数组数组
- ios - 如果我在录制期间播放 AVPlayer,iOS ReplayKit 会停止录制麦克风
- sharepoint - 如何在 SPFX 经典视图中创建自定义母版页
- continuous-integration - 必须启用“允许脚本访问 OAuth 令牌”
- javascript - Typescript/Angular 数组在副本上操作对象
- c# - 为什么我们需要创建、打开和关闭数据库连接来检索多个结果集,但如果检索一个结果集则不需要?
- php - 如何打印存储在多维数组中并使用 PHP 从数据库中获取的数据?
- python - Python - 如何在第一行条件下提取子集
- android - 通过 Web URL 安装 .apk 的意图
- python - xpath lxml无法获取html的ul标签内的所有元素