ImageCodecInfoを使用したデモみたいなものです。
下記ではファイルの中身と拡張子が一致しているかを調べています。
.Net Frameworkでサポートされている拡張子
BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,EMF,WMF,TIF,TIFF,PNG,ICO
フォーマット | 分類される拡張子 |
---|---|
BMP | BMP,DIB,RLE |
JPEG | JPG,JPEG,JPE,JFIF |
GIF | GIF |
EMF | EMF |
WMF | WMF |
TIF | TIF,TIFF |
PNG | PNG |
ICO | ICO |
「RawFormat.Guid」プロパティによって取得できるファイルフォーマット、つまり中身と拡張子を比較するため、拡張子によって分類されるファイルフォーマットを取得する必要があります。
対象イメージのファイルフォーマットを拡張子から判断し取得します
public static IEnumerable GetFileNameExtensions(ImageCodecInfo ici) { //FilenameExtensionで返される文字列を";"で分割します。 foreach (string s in ici.FilenameExtension.Split(';')) { //"."は不要なので省きます yield return s.Substring(s.IndexOf('.')); } } public static string GetImageFormat(string ext) { foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageDecoders()) { foreach (string s in GetFileNameExtensions(ici)) { if (s.ToUpper() == ext.ToUpper()) { //該当するFormatDescriptionを返します。 return ici.FormatDescription; } } } return null; }
対象イメージのファイルフォーマットをRawFormatから判断し取得します
public static string GetFileFormat(Image img) { try { foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageDecoders()) { if (ici.FormatID == img.RawFormat.Guid) //該当するFormatDescriptionを返します。 return ici.FormatDescription; } return string.Empty; } catch { return string.Empty; } }
For example
static void Main(string[] args)
{
string path = @"C:\test.png";
string fileFormat1 = GetFileFormat(Path.GetExtension(path));
string fileFormat2 = GetFileFormat(new Bitmap(path));
Console.WriteLine(
"fileFormat1 = {0}\nfileFormat2 = {1}\nEquals : {2}",
fileFormat1, fileFormat2, fileFormat1 == fileFormat2);
Console.ReadLine();
}
0 Comments:
コメントを投稿