jpg - ¿Hay alguna manera de inferir qué formato de imagen es un archivo sin leer todo el archivo?
formatos de imagen wikipedia (5)
¿Hay una buena manera de ver qué formato tiene una imagen, sin tener que leer todo el archivo en la memoria?
Obviamente, esto varía de formato a formato (estoy particularmente interesado en los archivos TIFF), pero ¿qué tipo de procedimiento sería útil para determinar qué tipo de formato de imagen es un archivo sin tener que leer todo el archivo?
BONO : ¿Qué pasa si la imagen es una cadena codificada en Base64? ¿Alguna forma confiable de inferirlo antes de decodificarlo?
Ya sea file
en la línea de comando * nix o leyendo los bytes iniciales del archivo. La mayoría de los archivos vienen con un encabezado único en los primeros bytes. Por ejemplo, el encabezado de TIFF se ve así:
0x00000000: 4949 2a00 0800 0000 Para obtener más información sobre el formato de archivo TIFF específicamente si desea saber qué representan esos bytes, vaya aquí .
La mayoría de los formatos de archivo de imagen tienen bytes únicos al comienzo. El comando del file
Unix mira el inicio del archivo para ver qué tipo de datos contiene. Vea el artículo de Wikipedia sobre números mágicos en archivos y magicdb.org .
Los TIFF comenzarán con II o MM (orden de bytes Intel o Motorolla).
La especificación TIFF 6 se puede descargar aquí y no es muy difícil de seguir
Un sitio completo de formatos de archivos está disponible en:
Seguro que hay Como han mencionado los otros, la mayoría de las imágenes comienzan con algún tipo de "magia", que siempre se traducirá en algún tipo de datos de Base64. Los siguientes son algunos ejemplos:
Un mapa de bits comenzará con Qk3
Un Jpeg comenzará con /9j/
Un GIF comenzará con R0l
(Eso es un cero como el segundo carácter).
Y así. No es difícil tomar los diferentes tipos de imágenes y descubrir a qué codifican. Solo tenga cuidado, ya que algunos tienen más de una pieza de magia, por lo que debe contarlos en su "código de traducción" B64.