3个版本
0.1.2 | 2020年8月27日 |
---|---|
0.1.1 | 2020年8月26日 |
0.1.0 | 2020年8月23日 |
#557 in 图像
115KB
3K SLoC
DevPNG
注意
目前,这个crate正在建设中。
如果你需要什么,可以告诉我
- Rust编程语言社区discord:@Engineer#7038
- 邮件:[email protected]
如果你遇到一些问题,告诉我。
示例
想要修改图像吗?
use devpng::prelude::PNG;
fn main() -> Result<(), String> {
// Load.
let mut buf = std::fs::read("img.png")
.expect("Couldn't read the file.");
let mut png = PNG::load(&mut buf)?;
// Access image.
let img = png.image();
// Modify image.
for x in img.iter_mut() {
*x = !*x;
}
// Store.
png.store("img.png")?;
Ok(())
}
想要创建图像吗?
use devpng::prelude::{ColourType, Image, PNG, Point};
fn main() -> Result<(), String> {
let mut data = vec![255; 800 * 200];
let img = Image::new(&mut data[..])
.set_ncol(800) // 200
.set_nrow(200)
.set_depth(8)
.set_colour(ColourType::RGBA);
let mut buf = Vec::new();
let mut png = PNG::from_image(&mut buf, &img);
let mut img = png.image();
for i in 0..50 {
let center = Point { x: 100, y: 100 };
let radius = 80 - i as i32;
let colour = &[0, (255 - i * 5) as u8, (255 - i * 5) as u8, 255];
img.plot_circle(center, radius, colour);
}
// Store.
png.store("img.png")?;
Ok(())
}
想要低级别访问?
use devpng::prelude::DataStreamMut;
fn main() -> Result<(), String> {
// Load.
let mut buf = std::fs::read("img.png")
.expect("Couldn't read the file.");
let mut datastream = DataStreamMut::from(&mut buf)?;
// Access image.
let mut cache = datastream.idat()?;
let img = cache.image();
// Modify image.
for x in img.iter_mut() {
*x = !*x;
}
// Store.
let png = datastream.rebuild(&mut Some(&mut cache));
std::fs::write("img.png", png)
.expect("Couldn't write the file.");
Ok(())
}
图像
文档
参见 RustDoc文档。
安装
将以下行添加到你的 Cargo.toml
[dependencies]
devpng = "0"
参考
- DEFLATE: RFC-1951
- PNG: RFC-2083
- W3C: https://www.w3.org/TR/PNG/