¿Qué es JFIF?
JFIF es una convención de intercambio que coloca datos de imagen comprimidos con JPEG en una estructura de archivo definida. Especifica detalles como la alineación de componentes, la interpretación del color, la densidad de píxeles y la relación de aspecto.
Cómo funciona JFIF
JFIF añade un conjunto pequeño y fijo de convenciones a un flujo JPEG para que decodificadores independientes lo interpreten de la misma manera. Su segmento de encabezado APP0, obligatorio inmediatamente después del marcador de inicio de imagen, registra una versión, una densidad de píxeles en puntos por pulgada o por centímetro (o, con las unidades establecidas en 0, solo una relación de aspecto del píxel) y una miniatura opcional. La especificación también fija la interpretación del color en escala de grises o YCbCr de rango completo, el orden de las muestras de arriba hacia abajo y la posición de las muestras de crominancia submuestreadas respecto a la luminancia. El archivo sigue siendo un flujo JPEG basado en marcadores, no un contenedor basado en cajas, y otros segmentos de aplicación, como un perfil ICC en APP2, pueden seguir al encabezado JFIF. La versión 1.02 de 1992 se formalizó posteriormente como ITU-T T.871 e ISO/IEC 10918-5.
Datos clave
- Identifica JFIF a partir de los bytes, no del sufijo: el archivo comienza con SOI (
FF D8), seguido inmediatamente de un segmento APP0 (FF E0y luego una longitud de dos bytes) cuyos datos comienzan con la cadena terminada en ceroJFIF(4A 46 49 46 00). Un JPEG cuyo primer segmento sea cualquier otro, como APP1 de Exif, no es un archivo JFIF conforme, aunque se llame.jpgo.jfif. La coincidencia con esta firma solo muestra que un archivo se declara JFIF: la conformidad también requiere un flujo de intercambio JPEG válido y el cumplimiento de las restricciones de encabezado y trama de la cláusula10.1de T.871, como valores de densidad distintos de cero y uno o tres componentes con los identificadores 1, 2 y 3 para Y, Cb y Cr. - JFIF abarca únicamente imágenes con uno o tres canales de 8 bits cada uno: Y en escala de grises o YCbCr basado en BT.601 y escalado al rango completo 0–255. Los JPEG codificados en CMYK y RGB quedan fuera de esta convención y se indican mediante otras convenciones, como el marcador APP14 de Adobe. El propio estándar señala que esto solo proporciona una fidelidad de color básica y que puede ser necesario un perfil ICC para obtener colores más precisos.
- JFIF y Exif requieren cada uno su propio segmento inmediatamente después de SOI (APP0 para JFIF y APP1 para Exif), por lo que un archivo no puede cumplir estrictamente con ambos. Las herramientas de escritura los combinan de todos modos, por ejemplo, escribiendo primero APP0 de JFIF y después APP1 de Exif; ese orden cumple la regla de ubicación de JFIF, pero no la de Exif. Por lo tanto, un analizador debería recorrer todos los segmentos de aplicación y comprobar su cadena de identificación en lugar de dar por supuesta una única estructura de metadatos.
- Un encabezado JFIF puede incluir una miniatura RGB sin comprimir de 24 bits, y la versión 1.02 añade segmentos de extensión
JFXXpara miniaturas codificadas en JPEG, basadas en paleta o RGB. Exif define su propio mecanismo independiente de miniaturas, por lo que un flujo de trabajo que deba encontrar o eliminar vistas previas integradas también debe inspeccionarlo. Estos no son los únicos lugares donde puede haber una vista previa: los bloques de recursos de imagen de Photoshop, por ejemplo, pueden contener otra miniatura.
Cuándo es importante JFIF
Los analizadores pueden encontrar JFIF tanto en archivos .jpg comunes como en archivos con la extensión .jfif. El software también debe tener en cuenta convenciones de metadatos como Exif que no son totalmente compatibles con JFIF.
Fuentes
- Formato de intercambio de archivos JPEG, versión 1.02 (Hamilton, 1992)
- Rec. ITU-T T.871 (05/2011): formato de intercambio de archivos JPEG (JFIF)
- Biblioteca del Congreso: archivo codificado en JPEG con metadatos Exif, incluida la nota sobre el conflicto con JFIF
- libjpeg-turbo: uso de la biblioteca JPEG de IJG, «Espacios de color especiales» y «Marcadores especiales»
- Especificación de formatos de archivo de Adobe Photoshop, «Bloques de recursos de imagen» y «Formato de recurso de miniatura»