Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【PowerShell】画像ファイルのファイル形式を判定する

System.Drawing名前空間のImageクラスとSystem.Drawing.Imaging名前空間のImageFormatクラスを使う。画像ファイルをImageクラスのFromFileメソッドで読み込み、RawFormatプロパティと比較をすればよい。

ImageクラスのRawFormatプロパティは指定したファイルのGUIDを返し、ImageFormatクラスで定義されているファイル形式用のプロパティ(値はGUID)と比較をする。

以下は、PNGJPEG、GIFファイルをそれぞれ読み込んで判定をした例。最初にAdd-Typeコマンドレットを使用して、System.Drawing名前空間のクラスを使えるようにする。

PS > Add-Type -AssemblyName System.Drawing
PS > $img = [Drawing.Image]::FromFile("d:\image\image.png")
PS > $img.RawFormat
Guid
----
b96b3caf-0728-11d3-9d7b-0000f81ef32e
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Jpeg
False
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Png
True
PS > $img = [Drawing.Image]::FromFile("d:\image\image.jpg")
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Tiff
False
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Jpeg
True
PS > $img = [Drawing.Image]::FromFile("d:\image\image.gif")
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Bmp
False
PS > $img.RawFormat -eq [Drawing.Imaging.ImageFormat]::Gif
True

上記のとおりImageFormatクラスの各ファイル形式用のプロパティの値はGUID。存在しないプロパティ(ファイル形式)を指定すると、戻り値はヌルになる。

PS > [Drawing.Imaging.ImageFormat]::Bmp
Guid
----
b96b3cab-0728-11d3-9d7b-0000f81ef32e
PS > [Drawing.Imaging.ImageFormat]::Bmp -eq $null
False
PS > [Drawing.Imaging.ImageFormat]::Bmpp -eq $null
True

ImageFormatクラスで用意されているファイル形式の種類については、以下を参照のこと。

https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.imaging.imageformat?view=dotnet-plat-ext-7.0