機能と機能性
機能と特長
このページでは、Aspose.Imaging の FOSS が .NET のフォーマット検出とヘッダープロービング API に関するすべての機能領域をカバーし、実用的な C# の例を示します。ライブラリはピクセルデータをデコードすることはなく、すべてのメソッドはファイルヘッダーのみを読み取ります。
フォーマット検出
ImageProbe は静的エントリーポイントです。3 つのオーバーロードがファイルパス、ストリーム、そして生バイト配列をカバーします:
using Aspose.Imaging.Foss;
var fromPath = ImageProbe.ProbeFile("photo.jpg");
var fromBytes = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);
var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parseフォーマットだけで分岐させたい場合は DetectFormat を使用し、サイズ、ビット深度、またはフレーム数も必要な場合は Probe/ProbeFile を使用してください。
ヘッダーメタデータの読み取り
ProbeFile/Probe は、nullable な Width、Height、BitDepth、FrameCount を含む ImageInfo を返します — これらは検出されたフォーマットのヘッダーが実際にその値を持つ場合にのみ設定されます:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format(ImageFormat 列挙値)はヘッダーが認識されると必ず設定されます — それは確実に埋められる唯一のフィールドです。
フォーマット別メモ
いくつかのフォーマットはヘッダーの特殊性を持ち、ImageInfo が正規化または直接公開します:
| フォーマット | Behavior |
|---|---|
| GIF | FrameCount は、ファイルに複数フレームが含まれている場合のフレーム数を示します。カウントが判定できない場合は省略されます。 |
| BMP | ヘッダーの高さが負の場合(上から下への行順)は正規化され、Height は正の大きさを返します。 |
| DICOM | ヘッダーの解析は Implicit VR Little Endian と Explicit VR Little/Big Endian の転送構文を処理し、行数、列数、および割り当てられたビット数を抽出します。 |
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");サポートされているフォーマット
全 11 種類のフォーマットは同じ方法で検出されます — ImageProbe はフォーマットを識別し、ヘッダーのメタデータを読み取ります;いずれのフォーマットに対してもピクセルデータをデコードしたり再エンコードしたりすることはありません。フィールドの設定はフォーマットごとに実際に異なりますが — すべてのフォーマットが Format を設定し、ヘッダーにビット深度やフレーム数を含むのは一部のフォーマットだけです:
| フォーマット | 幅 / 高さ | ビット深度 | フレーム数 |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (bounds から) | — | — |
| WMF (配置可能) | ✓ (96 DPI 前提) | — | — |
| DICOM | ✓ (行/列) | ✓ (BitsAllocated) | — |
認識できないヘッダーは例外を投げるのではなく ImageFormat.Unknown に解決されます。いくつかの注目すべきフィールド設定の詳細は次のとおりです:PNG の FrameCount は常に 1 です(定数であり、実際のアニメーション PNG フレーム検出ではありません);ICO の FrameCount はディレクトリ内に埋め込まれたアイコンサイズの実際の数であり、ICO ディレクトリエントリの 0 次元バイトはフォーマット仕様に従い 256px を意味します;TIFF の FrameCount はファイルの IFD チェーンを限定的に走査した結果を反映します(各 IFD が 1 ページに相当);配置可能でない WMF は依然として正しく ImageFormat.Wmf と識別されますが、Format のみを返します — 次元は配置可能 WMF のみで、ヘッダーの単位/インチ境界からハードコードされた 96 DPI 変換により設定されます;EMF には明示的な幅/高さフィールドが全くないため、次元は代わりに rclBounds デバイス空間矩形から導出されます。
設計上のレジリエンス
ImageProbe は不正または切り捨てられた入力で例外を投げることはありません。例外を発生させる代わりに、部分的な ImageInfo を返します — ヘッダーのフォーマットマーカーが認識された場合は常に Format が設定され、ファイルの残りが短縮されていたり破損していたりしても同様です:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullこれにより、信頼できない、部分的、または進行中のダウンロードに対して、すべての呼び出しごとに try/catch を入れずに安全に実行できます。
ヒントとベストプラクティス
- 形式だけが必要で寸法が不要な場合は、
Probeの代わりにDetectFormatを使用してください。 - 使用する前に
Width/Height/BitDepth/FrameCountにnullがあるか確認してください — すべての形式で設定されているわけではありません。 - 大きなファイルを扱う場合は、ファイル全体をバイト配列に読み込むよりも
Probe(stream)を優先してください。 ImageProbeは完全に静的です — インスタンスもIDisposableも設定オブジェクトも不要です。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
FormatはImageFormat.Unknown | ヘッダーが認識された 11 の形式のいずれにも一致しません | ファイルが PNG、JPEG、GIF、BMP、WebP、ICO、TIFF、PSD、EMF、WMF、または DICOM のいずれかであることを確認してください |
Width/Heightはnull | その形式のヘッダーにはそのフィールドが含まれていないか、フィールドの前でヘッダーが切り詰められています | まずFormatを確認してください; すべての形式で全てのフィールドが設定されているわけではありません |
| BMP の高さが予期せず正の値になっています | ソースファイルはヘッダーで負の(上から下へ)高さを使用しています | 期待 — ImageInfo.Height は常に正の大きさに正規化されます |
FAQ
ImageProbeはピクセルデータをデコードしますか?
いいえ。すべてのメソッドはファイルヘッダーのみを読み取ります — サイズ、ビット深度、フレーム数 — ピクセル内容は読み取りません。デコードやレンダリングはこのライブラリの範囲外です。
破損または切り詰められたファイルをプローブした場合、どうなりますか?
ImageProbeは不正または切り詰められた入力で例外を投げません。利用可能なヘッダー バイトから判別できたフィールドを含むImageInfoを返します — フォーマットマーカー自体が認識された場合はFormatが設定されます。
シークできないストリームをプローブできますか?
はい。Probe(stream)はシーク可能なストリームとシーク不可能なストリームの両方を受け入れます。
API Reference の概要
| クラス / メソッド | 説明 |
|---|---|
ImageProbe.ProbeFile(path) | パスでファイルをプローブし、ImageInfo を返す |
ImageProbe.Probe(stream) | Stream をプローブする (シーク可能かどうか) |
ImageProbe.Probe(data) | 生の byte[] をプローブする |
ImageProbe.DetectFormat(stream) | ストリームに対して ImageFormat のみを返す |
ImageProbe.DetectFormat(data) | byte[] に対して ImageFormat のみを返す |
ImageInfo | 結果タイプ: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | 列挙型: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |