001号RUST库:image用Rust编写的图像库

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

ImageDecoderImageDecoderExt 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.net/share/27279.html

发表评论

登录后才能评论