使用 Rust-Image 程式生成影象

Nilesh Katuwal 2022年6月7日
使用 Rust-Image 程式生成影象

在本文中,我們將學習使用 rust-image 以程式方式生成影象。

使用 Rust-Image 程式生成影象

Crate Image

這個 crate 為影象編碼和解碼以及基本的影象處理功能提供了原生的 Rust 實現。README.md 檔案中還提供了其他文件,可在 GitHub 上方便地檢視。

該庫為兩個基本問題提供瞭解決方案:影象編碼的統一介面和內容的簡單通用緩衝區。每個功能都可以獨立於其他功能使用。

重點放在一組小而穩定的日常操作上,額外的專用板條箱可以補充這些操作。此外,該庫支援具有很少依賴性的安全解決方案。

使用 io::Reader 載入影象:

use std::io::Cursor;
use image::io::Reader as ImageReader;

let img_one = ImageReader::open("imagetest.png")?.decode()?;
let img_two = ImageReader::new(Cursor::new(bytes)).with_guessed_format()?.decode()?;

要儲存影象:

img.save("theimage.jpg")?;

let mut bytes: Vec<u8> = Vec::new();
img2.write_to(&mut Cursor::new(&mut bytes), image::ImageOutputFormat::Png)?;

影象緩衝器

兩種主要的影象儲存格式:

  1. 儲存靜態型別影象資料的 Image buffer
  2. DynamicImage 是對支援它們之間轉換的受支援 ImageBuffer 格式的列舉。

除了一些專門的選項:

  1. 可變影象緩衝區的 GenericImage 特徵。
  2. 只讀 GenericImage 引用的 GenericImageView 特徵。
  3. flat 模組,包含通用通道矩陣和外部介面的互操作性型別。

所有提供的影象處理函式都在實現 GenericImageViewGenericImage 特徵並返回 ImageBuffer. 的型別上執行。所有影象格式解碼器都實現了 ImageDecoder 特徵,它提供了檢索影象後設資料和解碼影象的基本方法。

某些格式還提供 ImageDecoderExt 實現,允許一次僅解碼影象的一部分。

最關鍵的解碼技術是:

  1. Dimensions:返回一個包含影象寬度和高度的元組。
    2、顏色型別:返回本解碼器輸出的影象資料的顏色型別。
  2. 讀取影象:將整個影象解碼成一個位元組陣列。

動態影象

DynamicImage 列舉所有支援的 ImageBuffer<P> 型別。其精確的影象型別是在執行期間確定的。

它是開啟影象時返回的型別。DynamicImage 為方便起見重新實現了所有影象處理功能。

對於 RGBA 畫素,DynamicImage 實現 GenericImageViewGenericImage 特徵。