Adam está apuntando en la dirección correcta.
Si usted quiere encontrar la manera de sentido casi cualquier archivo, mirar a la base de datos detrás del comando file
en una máquina UNIX, Linux o Mac OS X.
file
usa una base de datos de "números mágicos" - los bytes iniciales que Adam mencionó - para detectar el tipo de un archivo. man file
le dirá dónde encontrar la base de datos en su máquina, p. /usr/share/file/magic
. man magic
le dirá que es format.
Usted puede escribir su propio código de detección en base a lo que se ve en la base de datos, utilice bibliotecas pre-envasados (por ejemplo python-magic), o - si está realmente aventurero - aplicar una versión .NET de libmagic
. No pude encontrar uno, y espero que otro miembro pueda señalar uno.
En caso de que usted no tiene una máquina UNIX a mano, la base de datos tiene el siguiente aspecto:
# 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
Buena suerte!
FYI, esto también funciona para los flujos utilizando System.Drawing.Image.FromStream() – jishi
si estás en el contexto de una aplicación web, es importante utilizar el nombre completo o importar el montaje para evitar confusión con un control de imagen ... System.Drawing.Image – MacGyver