.NET で Aspose.Imaging FOSS Core API を操作する方法

.NET で Aspose.Imaging FOSS Core API を操作する方法

Aspose.Imaging FOSS for .NET の公開インターフェースは、ImageProbe、ImageInfo、ImageFormat の3つのクラスで構成されています。このガイドでは、パッケージのインストール方法と、3つすべてを組み合わせてフォーマットを検出し、ファイル、ストリーム、バイト配列からヘッダー メタデータを読み取る方法を解説します。

ステップバイステップ ガイド

ステップ 1: パッケージをインストールする

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build

このパッケージは net8.0 と netstandard2.0 を対象としており、外部ランタイム依存関係はゼロです。


ステップ 2: 名前空間をインポートする

単一のusingディレクティブを追加します — これによりImageProbe、ImageInfo、ImageFormat、全体のAPIサーフェスが公開されるため、他にインポートすべきものはありません:

using Aspose.Imaging.Foss;

ステップ 3: パスでファイルをプローブする

ImageProbe.ProbeFileはファイルヘッダーを最低限だけ読み取り、ImageInfo結果を生成します — ピクセルデータは決してデコードしません:

var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");

ステップ 4: ストリームまたはバイト配列をプローブする

画像がすでにメモリ上にある、またはストリーム(アップロードやネットワーク応答)から取得された場合は、最初に一時ファイルに書き込む代わりに、それらを直接受け取るオーバーロードを使用してください:

byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);

using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);

Probe(stream)はシーク可能ストリームとシーク不可能ストリームの両方で動作します。


ステップ 5: フォーマットだけが必要なときはDetectFormatを使用する

フォーマットで分岐するだけで、サイズ、ビット深度、フレーム数が不要な場合、DetectFormatはヘッダー解析の残りをスキップします:

var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
    // route to DICOM-specific handling
}

ステップ 6: Nullable ImageInfo フィールドを安全に読み取る

Width、Height、BitDepth、および FrameCount は nullable です — 検出されたフォーマットのヘッダーに実際にその値が含まれている場合にのみ設定されます。Format はヘッダーが認識されると必ず設定される唯一のフィールドです:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
    Console.WriteLine($"{info.Format}: dimensions not available in this header");
}

一般的な問題と対策

フォーマットは次のように表示されます ImageFormat.Unknown. ファイルのヘッダーが、認識された 11 種類のフォーマット (PNG、JPEG、GIF、BMP、WebP、ICO、TIFF、PSD、EMF、WMF、DICOM) のいずれにも一致しません。ファイルが本当にこれらのフォーマットのいずれかであることを確認してください — ImageProbe 未認識のヘッダーに対して例外を投げることはなく、報告します Unknown 代わりに。

Width/Height are null たとえ Format が設定されています。 確認してください Format 最初に、残りはオプションとして扱います。

Calling Probe when DetectFormat それでいいです。 Probe and ProbeFile 完全なヘッダーを解析します; DetectFormat フォーマットを識別するのに十分なだけを読み取ります。使用してください DetectFormat 読まない場合は Width/Height/BitDepth/FrameCount.

デコードされたピクセルデータを期待しています。 ImageProbe 画像コンテンツをデコード、レンダリング、変換することはありません — ヘッダーメタデータのみを読み取ります。デコードやピクセルレベルの操作には、商用 Aspose.Imaging SDK が必要です。

よくある質問

切り詰められたまたは破損したファイルをプローブした場合、どうなりますか?

ImageProbe は不正な形式や切り詰められた入力で例外を投げません。部分的な ImageInfo を返します — ヘッダーのフォーマットマーカーが認識された場合は、たとえファイルの残りが途中で切れていても Format が設定されます。

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

はい。ImageProbe は静的で、呼び出し間で可変状態を保持しないため、複数スレッドからの同時呼び出しは安全です。

実際のファイルをプローブせずに、直接 ImageInfo を構築できますか?

はい。ImageInfo のコンストラクタは public で、format だけが必須です — テストダブルを作成する際に便利です: new ImageInfo(ImageFormat.Png, width: 64, height: 48)。

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

No. ImageProbe は独自の IDisposable リソースを保持していません。自分で開いた Stream を渡す場合、処分の責任は引き続きあなたにあります。

参照

 日本語