Adam pointe exactement dans la bonne direction.
Si vous voulez savoir comment sens presque tous les fichiers, regardez la base de données derrière la commande file
sur une machine UNIX, Linux ou Mac OS X.
file
utilise une base de données de "nombres magiques" - ces octets initiaux Adam répertoriés - pour détecter le type d'un fichier. man file
vous dira où trouver la base de données sur votre machine, par ex. /usr/share/file/magic
. man magic
vous dira format.
Vous pouvez écrire votre propre code de détection basé sur ce que vous voyez dans la base de données, utilisez les bibliothèques pré-emballés (par exemple python-magic), ou - si vous êtes vraiment aventureux - mettre en œuvre une version .NET de libmagic
. Je n'ai pas pu en trouver un, et j'espère qu'un autre membre pourra en signaler un.
Si vous ne disposez pas d'une machine UNIX pratique, la base de données ressemble à ceci:
# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
# (Greg Roelofs, [email protected])
# (Albert Cahalan, [email protected])
#
# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
#
0 string \x89PNG PNG image data,
>4 belong !0x0d0a1a0a CORRUPTED,
>4 belong 0x0d0a1a0a
>>16 belong x %ld x
>>20 belong x %ld,
>>24 byte x %d-bit
>>25 byte 0 grayscale,
>>25 byte 2 \b/color RGB,
>>25 byte 3 colormap,
>>25 byte 4 gray+alpha,
>>25 byte 6 \b/color RGBA,
#>>26 byte 0 deflate/32K,
>>28 byte 0 non-interlaced
>>28 byte 1 interlaced
1 string PNG PNG image data, CORRUPTED
# GIF
0 string GIF8 GIF image data
>4 string 7a \b, version 8%s,
>4 string 9a \b, version 8%s,
>6 leshort >0 %hd x
>8 leshort >0 %hd
#>10 byte &0x80 color mapped,
#>10 byte&0x07 =0x00 2 colors
#>10 byte&0x07 =0x01 4 colors
#>10 byte&0x07 =0x02 8 colors
#>10 byte&0x07 =0x03 16 colors
#>10 byte&0x07 =0x04 32 colors
#>10 byte&0x07 =0x05 64 colors
#>10 byte&0x07 =0x06 128 colors
#>10 byte&0x07 =0x07 256 colors
Bonne chance!
Pour votre information, cela fonctionne aussi pour les flux en utilisant System.Drawing.Image.FromStream() – jishi
si vous êtes dans le cadre d'une application web, il est important d'utiliser le nom complet ou importer l'ensemble pour éviter confusion avec un contrôle Image ... System.Drawing.Image – MacGyver