コア API

コアAPI

Aspose.Imaging の .NET の全パブリックサーフェス向けのFOSSは3つのクラスです: ImageProbe (静的ファサード), ImageInfo (結果値)、および ImageFormat (フォーマット列挙)。このページでは、機能別ツアーを超えて、契約としてそれらがどのように結びつくかを説明します。 機能と特徴.


3 クラスの契約

  • ImageProbe — 静的、ステートレス。すべての呼び出しは独立しており、設定や破棄するものは何もありません。
  • ImageInfo — 封印され、イミュータブル。すべての5つのプロパティ (Format, Width, Height, BitDepth, FrameCount) は構築後に読み取り専用です。
  • ImageFormat — 認識されたフォーマットごとに1つの値を持つ列挙型、さらに Unknown.
using Aspose.Imaging.Foss;

var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format;   // always set
int? width = info.Width;            // set only when the format's header carries it

直接 ImageInfo を構築する

ImageInfo のコンストラクタは public です — 必要なのは format のみで、他のすべてのパラメータは null がデフォルトです。これは、実際のファイルを調べずに代替結果が必要なユニットテストに便利です:

using Aspose.Imaging.Foss;

// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);

// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);

対応する方法はありません mutate an ImageInfo 構築後 — すべてのプロパティは読み取り専用であるため、調査されたインスタンスまたは構築されたインスタンスは、防御的なコピーを行わずに安全に渡したりキャッシュしたりできます。


適切なオーバーロードの選択

Overload使用する場合
ImageProbe.ProbeFile(path)ファイルパスがあり、完全なImageInfoが欲しい
ImageProbe.Probe(stream)すでに開いているStream(シーク可能かどうかに関わらず)を持っていて、完全なImageInfoが欲しい
ImageProbe.Probe(data)バイトはすでにメモリにあり、完全なImageInfoが欲しいです。
ImageProbe.DetectFormat(stream) / (data)ImageFormatで分岐するだけで構いません — フォーマットシグネチャ以降のヘッダー解析はスキップしてください。

ProbeFile はファイル自体を開いて読み取ります — Probe(stream) を呼び出すだけのために先に FileStream を開く必要はありません。


ディレクトリのバッチプロービング

ImageProbe が決して例外を投げないため、ディレクトリスキャンは各ファイルごとの try/catch を行わずにタイトなループで呼び出すことができます:

using Aspose.Imaging.Foss;

foreach (var path in Directory.GetFiles("incoming"))
{
    var info = ImageProbe.ProbeFile(path);

    if (info.Format == ImageFormat.Unknown)
    {
        Console.WriteLine($"{path}: not a recognized image format, skipping");
        continue;
    }

    Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}

ヘッダーが 11 種類の認識されたフォーマットのいずれにも一致しないファイルは、例外を投げる代わりに ImageFormat.Unknown に解決されます — 上記のループでは catch ブロックは一切必要ありません。


例外を投げない契約

これは偶発的な動作ではなく、API 契約の意図的な部分です。認識されたフォーマットのヘッダーが解析途中で切り詰められたり不正な形になった場合でも、ImageProbe は認識したフォーマットが設定された Format を持つ ImageInfo を返します;呼び出し元に解析例外を伝搬させません。保証されるのは Format だけです — 検出されたフォーマットに関係なく、他のすべてのプロパティはオプショナルとして扱ってください。


一般的な問題

問題原因修正
作成されたImageInfoが実際のプローブ結果と一致しません。手動で構築されたインスタンスは、フィールド間の一貫性を検証しませんテストダブル用に手動構築を使用するだけにし、実際のファイルを調査する代替手段としては使用しないでください
DetectFormat で十分なのに Probe を呼び出すフォーマットだけが必要な場合に不要なヘッダー解析を行うもし Width/Height/BitDepth/FrameCount を一切読み込まないのであれば、DetectFormat を使用してください
サポートされていると想定するファイルには Unknown フォーマットを使用してくださいヘッダーが 11 種類の既知のシグネチャのいずれにも一致しない、あるいはファイルが全く別のフォーマットである可能性がありますファイルを以下と照合してください サポートされているフォーマット一覧

FAQ

私は ImageInfo または ImageProbe をサブクラス化できますか?

いいえ。ImageInfo は sealed であり、ImageProbe は static です — どちらもサブクラス化や継承によるインスタンス化を想定していません。

ImageProbe はスレッドセーフですか?

ImageProbe は呼び出し間で可変状態を保持しません — Probe、ProbeFile、または DetectFormat への各呼び出しは独立しており、複数スレッドからの同時呼び出しが安全です。

何か破棄する必要がありますか?

いいえ。ImageProbe は独自の IDisposable リソースを持ちません。自分で開いた Stream を渡した場合、そのストリームの破棄はあなたの責任です — Probe(stream) はそれを閉じません。


API Reference 概要

クラス / メソッド説明
ImageProbe.ProbeFile(path)パスでファイルをプローブする
ImageProbe.Probe(stream)Stream をプローブする
ImageProbe.Probe(data)byte[] をプローブする
ImageProbe.DetectFormat(stream)形式のみ、Stream から
ImageProbe.DetectFormat(data)形式のみ、byte[] から
ImageInfo(format, width, height, bitDepth, frameCount)公開コンストラクタ — 必要なのは format だけです
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount読み取り専用の結果プロパティ
ImageFormat列挙: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

参照

 日本語