网站首页 > 开源技术 正文
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: 对提供的图像执行 3x3 盒式过滤器。
- 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();
}
猜你喜欢
- 2024-11-17 Python动态绘图的方法(上)
- 2024-11-17 Python动态绘图的方法
- 2024-11-17 AI数据分析:用kimi生成一个正弦波数学动画
- 2024-11-17 如何把python绘制的动态图形保存为gif文件或视频
- 2024-11-17 Java 图片压缩生成缩略图和水印
- 2024-11-17 医疗影像工具LEADTOOLS 入门教程: 使用文档编写器创建文档 - C#
- 2024-11-17 Celluloid让matplotlib动画-2:红绿灯
- 2024-11-17 使用Adobe dng SDK一步一步显示图像
- 2024-11-17 方便!Python 操作 Excel 神器 xlsxwriter 初识
- 2024-11-17 Qt开源作品11-屏幕录制控件
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)