コア 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 |