Rust-Image を使用して手続き的に画像を生成する
この記事では、rust-image を使用して手続き的に画像を生成する方法について学習します。
Rust-Image を使用して手続き的に画像を生成する
クレート画像
このクレートは、画像のエンコードとデコード、および基本的な画像操作機能のためのネイティブ Rust 実装を提供します。追加のドキュメントは、GitHub で便利に表示される README.md
ファイルでも入手できます。
このライブラリは、2つの基本的な問題の解決策を提供します。画像エンコーディング用の統一されたインターフェイスと、コンテンツ用の単純な汎用バッファです。各機能は、他の機能とは独立して使用できます。
焦点は、追加の特殊な木枠が補うことができる、小さくて安定した日常業務のセットに置かれます。さらに、ライブラリは依存関係の少ない安全なソリューションを優先します。
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)?;
画像バッファ
2つの主要な画像ストレージ形式:
- 静的に入力された画像データを格納する
Image buffer
。 DynamicImage
は、サポートされているImageBuffer
形式の列挙であり、それらの間の変換をサポートします。
いくつかの特殊なオプションに加えて:
- 可変画像バッファの
GenericImage
特性。 - 読み取り専用の GenericImage 参照の
GenericImageView
特性。 - 汎用チャネルマトリックスと外部インターフェイスの相互運用性タイプを含む
フラット
モジュール。
提供されているすべての画像処理関数は、GenericImageView
および GenericImage
特性を実装し、ImageBuffer.
を返すタイプで動作します。すべての画像フォーマットデコーダーは、画像メタデータを取得して画像をデコードするための基本的な方法を提供する ImageDecoder
特性を実装しています。
一部のフォーマットは、一度に画像の一部のみのデコードを可能にする ImageDecoderExt
実装を追加で提供します。
最も重要なデコード手法は次のとおりです。
- 寸法:画像の幅と高さのタプルを返します。
- カラータイプ:このデコーダーによって出力された画像データのカラータイプを返します。
- 画像の読み取り:画像全体をバイト配列にデコードします。
ダイナミックイメージ
DynamicImage
は、サポートされているすべての ImageBuffer<P>
タイプを列挙します。その正確な画像タイプは、実行中に決定されます。
画像を開いたときに返されるタイプです。DynamicImage
は、利便性のためにすべての画像処理機能を再実装します。
RGBA ピクセルの場合、DynamicImage
は GenericImageView
および GenericImage
特性を実装します。