Rust-Image を使用して手続き的に画像を生成する

Nilesh Katuwal 2022年6月7日
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つの主要な画像ストレージ形式:

  1. 静的に入力された画像データを格納する Image buffer
  2. DynamicImage は、サポートされている ImageBuffer 形式の列挙であり、それらの間の変換をサポートします。

いくつかの特殊なオプションに加えて:

  1. 可変画像バッファの GenericImage 特性。
  2. 読み取り専用の GenericImage 参照の GenericImageView 特性。
  3. 汎用チャネルマトリックスと外部インターフェイスの相互運用性タイプを含むフラットモジュール。

提供されているすべての画像処理関数は、GenericImageView および GenericImage 特性を実装し、ImageBuffer. を返すタイプで動作します。すべての画像フォーマットデコーダーは、画像メタデータを取得して画像をデコードするための基本的な方法を提供する ImageDecoder 特性を実装しています。

一部のフォーマットは、一度に画像の一部のみのデコードを可能にする ImageDecoderExt 実装を追加で提供します。

最も重要なデコード手法は次のとおりです。

  1. 寸法:画像の幅と高さのタプルを返します。
  2. カラータイプ:このデコーダーによって出力された画像データのカラータイプを返します。
  3. 画像の読み取り:画像全体をバイト配列にデコードします。

ダイナミックイメージ

DynamicImage は、サポートされているすべての ImageBuffer<P> タイプを列挙します。その正確な画像タイプは、実行中に決定されます。

画像を開いたときに返されるタイプです。DynamicImage は、利便性のためにすべての画像処理機能を再実装します。

RGBA ピクセルの場合、DynamicImageGenericImageView および GenericImage 特性を実装します。