rust语言图像库 -image 为最常见的图像格式提供基本的过滤器和解码器。
https://crates.io/crates/image
这个 crate 提供了基本的图像处理函数和方法,用于在各种图像格式之间进行转换。
提供的所有图像处理函数都对实现 GenericImageView 和 GenericImage trait并返回 ImageBuffer 的类型进行操作。
支持的图像格式:
格式 |
解码 |
编码 |
PNG |
All supported color types |
Same as decoding |
JPEG |
Baseline and progressive |
Baseline JPEG |
GIF |
Yes |
Yes |
BMP |
Yes |
RGB(8), RGBA(8), Gray(8), GrayA(8) |
ICO |
Yes |
Yes |
TIFF |
Baseline(no fax support) + LZW + PackBits |
RGB(8), RGBA(8), Gray(8) |
WebP |
Lossy(Luma channel only) |
No |
AVIF |
Only 8-bit |
Lossy |
PNM |
PBM, PGM, PPM, standard PAM |
Yes |
DDS |
DXT1, DXT3, DXT5 |
No |
TGA |
Yes |
RGB(8), RGBA(8), BGR(8), BGRA(8), Gray(8), GrayA(8) |
farbfeld |
Yes |
Yes |
ImageDecoder和ImageDecoderExt Traits
所有图像格式解码器都实现了 ImageDecoder trait,它提供了获取图像元数据和解码图像的基本方法。某些格式还提供 ImageDecoderExt 实现,允许一次仅解码图像的一部分。
Pixels
image 库提供以下像素类型:
- Rgb: RGB pixel
- Rgba: RGBA pixel
- Luma: Grayscale pixel
- LumaA: Grayscale with alpha
所有像素都按其组件类型进行参数化。
Images
图像中的单个像素从左上角位置 (0,0) 开始进行索引。
GenericImageView 和 GenericImage Traits
提供检查 (GenericImageView) 和操作 (GenericImage) 图像的方法的Trait,通过图像的像素类型进行参数化。
GenericImageView 的一些方法:
- dimensions: 返回一个包含图像宽度和高度的元组。
- get_pixel: 返回位于 (x, y) 处的像素。
- pixels: 返回此图像像素上的迭代器。.
GenericImage 的一些方法:
- put_pixel: 在位置 (x, y) 放置一个像素。
- copy_from: 将另一个图像中的所有像素复制到该图像中。
图像的表示
image 提供了两种主要的表示图像数据的方式:
ImageBuffer
通过像素类型参数化,由宽度和高度以及像素向量表示的图像。它提供对其像素的直接访问并实现 GenericImageView 和 GenericImage Traits。
extern crate image;
use image::{GenericImage, GenericImageView, ImageBuffer, RgbImage};
fn main() {
// 构造一个具有指定宽度和高度的新 RGB ImageBuffer。
let img: RgbImage = ImageBuffer::new(512, 512);
// 通过重复调用提供的闭包来构造一个新的。
let mut img = ImageBuffer::from_fn(512, 512, |x, y| {
if x % 2 == 0 {
image::Luma([0u8])
} else {
image::Luma([255u8])
}
});
// 获取图像的宽度和高度。
let (width, height) = img.dimensions();
// 直接访问坐标 (100, 100) 处的像素。
let pixel = img[(100, 100)];
// 或者使用 `GenericImage` trait 中的 `get_pixel` 方法。
let pixel = *img.get_pixel(100, 100);
// 在坐标 (100, 100) 处放置一个像素。
img.put_pixel(100, 100, pixel);
// 迭代图像中的所有像素。
for pixel in img.pixels() {
//
}
}
DynamicImage
DynamicImage 是对所有支持 ImageBuffer<P> 类型的枚举。其确切的图像类型在运行时确定。它是在打开图像时返回的类型。为方便起见,DynamicImage 重新实现了所有图像处理功能。DynamicImage 为 RGBA 像素实现了 GenericImageView 和 GenericImage Trait。
SubImage
由矩形的坐标分隔出来的一个图像的视图。 给定的坐标设置矩形左上角的位置。 这用于对图像的子区域执行图像处理功能。
extern crate image;
use image::{GenericImageView, ImageBuffer, RgbImage, imageops};
fn main() {
extern crate image;
use image::{GenericImageView, ImageBuffer, RgbImage, imageops};
let mut img: RgbImage = ImageBuffer::new(512, 512);
let subimg = imageops::crop(&mut img, 0, 0, 100, 100);
assert!(subimg.dimensions() == (100, 100));
}
图像处理功能
以下这些是在 imageops 模块中定义的函数。所有函数都对实现 GenericImage trait 的类型进行操作。请注意,某些功能在调试模式下非常慢。如果您遇到任何性能问题,请确保使用发布模式。
- blur: 对提供的图像执行高斯模糊。
- brighten: 使提供的图像变亮。
- huerotate: 色调按度旋转提供的图像。
- contrast: 调整所提供图像的对比度。
- crop: 将可变视图返回到图像中。
- filter3x3: 对提供的图像执行 3×3 盒式过滤器。
- flip_horizontal: 水平翻转图像。
- flip_vertical: 垂直翻转图像。
- grayscale: 将提供的图像转换为灰度。
- invert: 反转提供的图像中的每个像素 此功能就地运行。
- resize: 将提供的图像调整为指定的尺寸。
- rotate180: 将图像顺时针旋转 180 度。
- rotate270: 将图像顺时针旋转 270 度。
- rotate90: 将图像顺时针旋转 90 度。
- unsharpen: 对提供的图像执行反锐化蒙版。
有关更多选项,请参阅 imageproc 箱。
https://crates.io/crates/imageproc
Examples
1.0 打开和保存图像
image 提供了从路径打开图像的 open 功能。图像格式由路径的文件扩展名决定。 io 模块提供了一个提供更多控制的阅读器。
extern crate image;
use image::GenericImageView;
fn main() {
// 使用 open 函数从路径加载图像。
// `open` 成功返回一个 `DynamicImage`。
let img = image::open("img.png").unwrap();
// dimensions 方法返回图像的宽度和高度。
println!("dimensions {:?}", img.dimensions());
// color 方法返回图像的`ColorType`。
println!("{:?}", img.color());
// 将此图像的内容以 PNG 格式写入 Writer。
img.save("test.png").unwrap();
}
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/share/27279.html