image-processing - 如何将 DynamicImage 转换为 Base64?
问题描述
DynamicImage
我可以使用image
and crates将 Base64 字符串转换为 a ,base64
但我无法将图像转换回 Base64 字符串。
我在这里做错了什么?如何做到这一点?
extern crate base64;
extern crate image;
fn main() {
/*
Base64 to image
let img_buffer = base64::decode("qwerty...").unwrap();
let mut base_img = image::load_from_memory(img_buffer.as_slice()).unwrap();
*/
let mut base_img = image::open("player.png").unwrap();
base_img.invert();
// base_img.save("player1.png").unwrap();
// image to Base64
let res_base64 = base64::encode(base_img.raw_pixels().as_slice());
println!("{}", res_base64)
}
原图base64值
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR42uydd5hlRZn/v1Un3dzdt/P0pJ6enANxGKISFEQkg4ur6667uquuCiKCIJKUpAj7U3cN66orWVERVxBmmDxMYHLOM90znfvGk6rq98e9ICoo0Kf73u5+P8+DjPBwZrpO1Xm...
Gimp倒置图像的Base64值
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wgMCCwxQF4N2QAAIABJREFUeNrsvXmc3FWZ7...
我得到的响应不是正确的 Base64 值:
////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///...
解决方案
原始图像和 Gimp 图像的 Base64 值表示 PNG 编码的图像。您得到的响应代表原始像素数据。在编码为 Base64 之前,您需要将数据转换为 PNG。这应该这样做:
let mut buf = vec![[]];
base_img.write_to(&mut buf, image::ImageOutputFormat::PNG);
let res_base64 = base64::encode(&buf);
推荐阅读
- bixby - 将 vivContext.userId 拉入 Action
- nservicebus - 是否有与 ASB 传输的 AutoRenewTimeout(TimeSpan) 等效的方法?
- java - Hibernate 不会在 Spring 隐式 @Transactional 注释方法提交上触发注册的 EventListeners
- nexus - helm 通过 CLI 托管 repo
- python - 带有数组/字典的 Python 代码没有达到我的预期
- scala - How to do ordering of a sealed trait?
- python - 如何使用python按两列分组,对它们求和并使用其中一列进行排序并获得pandas中每组最高的n
- reactjs - 如何将 li.menu 更改为不包含填充或更改背景颜色
- javascript - PHASER:在 create() 中加载和添加图像?
- sed - sed 多行替换单个数字