導入
Aspose.Imaging FOSS for .NET は、.NET 開発者が画像ファイルが何かを知る必要がある場合に利用できる、無料の MIT ライセンスのオープンソース ライブラリです is — そのフォーマット、寸法、ビット深度、フレーム数 — を、デコードにかかるコストを払わずに取得できます。The static ImageProbe class がエントリーポイントです: ProbeFile(path) ディスクから読み取ります、 Probe(stream) and Probe(data) ストリームまたはバイト配列を受け取り、 DetectFormat(stream) / DetectFormat(data) 返します ImageFormat enum 値を、完全なものを構築せずに ImageInfo、フォーマットに基づいて分岐するだけの呼び出し元向けです。すべてのプローブメソッドは、an ImageInfo nullable を持つオブジェクト Width, Height, BitDepth、そして FrameCount プロパティは、検出されたフォーマットのヘッダーが実際にその値を持つ場合にのみ設定されます。
これは意図的に限定的なツールであり、それがポイントです。ピクセルのデコード、画像のレンダリング、フォーマット間の変換は行いません — そのためには、商用の Aspose.Imaging for .NET 製品が適切です(下記「オープンソースとライセンス」セクションにリンクあり)。Aspose.Imaging FOSS for .NET が行うのは、はるかに小さく、はるかに一般的な「what format is this, and how big is it?」という質問に、できるだけ速く安全に答える仕事です。完全なデコードが無駄になるような問題領域、例えばアップロードの検証、サムネイルレイアウトのサイズ測定、混在ファイルのバッチ処理の一次診断、または前処理チェックのための DICOM ヘッダーフィールドの読み取りなどに適しています。
このライブラリは MIT ライセンスで、外部依存は一切なく、netstandard2.0 と net8.0 の両方を対象としています — オープンソースでも商用でも無料で使用でき、ロイヤリティや再配布制限はありません。
主な機能
ファイルを調査する3つの方法
ImageProbe はファイルパス、ストリーム、バイト配列のエントリーポイントを提供するため、画像データがパイプライン内のどこに存在していても対応できます — ディスク上、メモリ上、またはネットワーク越しに到着する場合でも。DetectFormat はフォーマットで分岐するだけの場合に、完全な ImageInfo の構築を省略します。
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
構造化された、正直な結果
ImageInfo は Format(ImageFormat 列挙値で、ヘッダーが認識されると必ず設定されます)と、nullable な Width、Height、BitDepth、および FrameCount を同時に公開します。“Nullable” はここで実際に機能しています:フィールドの設定はフォーマットごとに実際に異なり、ImageInfo はフォーマットのヘッダーが持たない値を決して作り出しません。使用前に null をチェックすることが正しいパターンであり、防御的な後付けではありません。
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 のフォーマット、うち 3 つは FOSS .NET スペースで検出される唯一のもの
PNG、JPEG、GIF、BMP、WebP(lossy、lossless、and extended)、ICO、TIFF、PSD、EMF、WMF、そして DICOM。フィールドの設定は意図的にフォーマットごとに異なり、欠落によるものではありません — PNG は幅、高さ、ビット深度を保持します、 and フレーム数(ただし FrameCount はハードコードされた 1、実際のアニメーション PNG フレーム検出ではありません); FrameCount はディレクトリ内に埋め込まれたアイコンサイズの実際のカウントであり、 and a 0 ICO ディレクトリエントリの寸法フィールドのバイトは 256px を意味します(フォーマット仕様による)。TIFF の FrameCount ファイルの IFD チェーンを有限にたどることを表し、ページごとに 1 つの IFD があります。
これら 11 のうちの 3 つ — PSD、EMF/WMF、そして DICOM — は、我々が認識している限り、他に無料のオープンソース .NET 検出器がなく、これがこのライブラリが存在する実際の理由の一部です。
WMF と EMF:2 つのレガシーフォーマット、2 つの異なる制限
非配置可能 WMF は依然として正しく ImageFormat.Wmf と識別されますが、寸法を設定するのは配置可能 WMF のみです — ヘッダーのインチ単位の境界からハードコードされた 96 DPI 変換で導出されます。WMF 自体は絶対的なピクセルサイズを持たないためです。EMF には明示的な幅/高さフィールドが全くなく、寸法は代わりに EMF ヘッダー内の rclBounds デバイス空間矩形から取得されます。これらは両方とも正直に ImageInfo に反映されます:値が導出できない場合、プロパティは推測せずに null のままです。
ビューアなしの DICOM ヘッダー解析
ImageProbe は Implicit VR Little Endian と Explicit VR Little/Big Endian の転送構文全体で DICOM ヘッダーを読み取り、Rows を Height に、Columns を Width に、BitsAllocated を BitDepth に抽出します — DICOM ビューアや外部画像依存は不要です。パースは設計上保守的で、長さ未定義のシーケンス要素が出現した場合は内容を推測せずに走査を停止するため、部分的にしか理解できない DICOM ファイルは誤った結果になるのではなく、部分的な ImageInfo に劣化します。
不正な入力や切り詰められた入力でも例外をスローしません。
Probe は信頼できない、部分的、または転送中のファイル向けに構築されています。ファイルがフォーマットのシグネチャに一致してもヘッダーを完全に解析できない場合 — ダウンロードが途中で切れた、アップロードが破損した — 結果は例外を出す代わりに検出された Format のみを保持します。
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
クイックスタート
パッケージをインストールし、次にディスク上のファイルをプローブして、検出されたフォーマット、サイズ、ビット深度、フレーム数を一度の呼び出しで取得します。その後、生バイトを使用したフォーマットのみのチェックを行います:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit, " +
$"{info.FrameCount ?? 0} frame(s)");
// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);
サポートされているフォーマット
Aspose.Imaging FOSS for .NET detects 以下の 11 種類すべてのフォーマットを対象にし、ヘッダー レベルのメタデータを読み取ります — ピクセルデータはデコードしないため、報告できる “write” 機能はありません。フィールドの入力はフォーマットにより異なります;詳細は上記の 主な機能 の内訳をご覧ください。
| フォーマット | 拡張子 | Detected | 幅 / 高さ | ビット深度 | フレーム数 |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (範囲から) | — | — |
| WMF | .wmf | ✓ | ✓ (配置可能のみ, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (行/列) | ✓ (BitsAllocated) | — |
オープンソースとライセンス
Aspose.Imaging FOSS for .NET は、外部依存がゼロの MIT ライセンスです。MIT ライセンスは、ロイヤリティや再配布に関する制限なしで、オープンソースプロジェクトおよび商用プロジェクトの両方での使用を許可します。ソースは GitHub で入手可能です。これは意図的にフォーマット検出のみに限定されています — これらの画像フォーマットのデコード、編集、変換については、Aspose.Imaging(.NET 用)をご参照ください — Enterprise Product。