使用 Rust-Image 程式生成影象
Nilesh Katuwal
2022年6月7日
在本文中,我們將學習使用 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)?;
影象緩衝器
兩種主要的影象儲存格式:
- 儲存靜態型別影象資料的
Image buffer
。 DynamicImage
是對支援它們之間轉換的受支援ImageBuffer
格式的列舉。
除了一些專門的選項:
- 可變影象緩衝區的
GenericImage
特徵。 - 只讀 GenericImage 引用的
GenericImageView
特徵。 flat
模組,包含通用通道矩陣和外部介面的互操作性型別。
所有提供的影象處理函式都在實現 GenericImageView
和 GenericImage
特徵並返回 ImageBuffer.
的型別上執行。所有影象格式解碼器都實現了 ImageDecoder
特徵,它提供了檢索影象後設資料和解碼影象的基本方法。
某些格式還提供 ImageDecoderExt
實現,允許一次僅解碼影象的一部分。
最關鍵的解碼技術是:
- Dimensions:返回一個包含影象寬度和高度的元組。
2、顏色型別:返回本解碼器輸出的影象資料的顏色型別。 - 讀取影象:將整個影象解碼成一個位元組陣列。
動態影象
DynamicImage
列舉所有支援的 ImageBuffer<P>
型別。其精確的影象型別是在執行期間確定的。
它是開啟影象時返回的型別。DynamicImage
為方便起見重新實現了所有影象處理功能。
對於 RGBA 畫素,DynamicImage
實現 GenericImageView
和 GenericImage
特徵。