JFIF
# JFIF

El JFIF (en inglés: JPEG File Interchange Format, en español: formato de intercambio de ficheros JPEG) es un formato de fichero estándar de imagen. Define especificaciones complementarias para el formato de contenedor que contiene los datos de imagen codificados con el algoritmo JPEG. Las especificaciones básicas para un formato de contenedor JPEG se definen en el anexo B del estándar JPEG, conocido como formato de intercambio JPEG (JIF). JFIF se basa en JIF resolviendo algunas sus limitaciones, como complejidad innecesaria, registro de muestras de componentes, resolución, relación de aspecto y espacio de color. Como JFIF es un estándar suplementario, el formato de fichero resultante se puede llamar "JPEG / JFIF".

JFIF es incompatible mutuamente con el nuevo formato de fichero de imagen intercambiable ( EXIF ).

## Propósito

JFIF define una serie de detalles que no se especifican según la norma JPEG Parte 1 ( ISO / IEC 10918-1, Recomendación UIT-T T.81). )

### Registro de ejemplo de componentes

JPEG permite que varios componentes (como Y, Cb y Cr ) tengan resoluciones diferentes, pero no define cómo se deben alinear estas matrices de muestra diferentes. El estándar JFIF requiere que las muestras se sitúen " intersticial ", es decir, el decodificador puede tratar cada matriz de componentes como una matriz de píxeles rectangulares de tamaño igual muestreados en sus centros, con cada matriz los mismos límites exteriores que la imagen. Esto es conveniente para los usuarios de ordenadores, pero no es la alineación que se utiliza en MPEG-2 y en la mayoría de aplicaciones de vídeo.

### Resolución y relación de aspecto

El estándar JPEG no incluye ningún método para codificar la resolución ni la relación de aspecto de una imagen. JFIF proporciona información de resolución o relación de aspecto mediante una extensión de segmento de aplicación a JPEG. Utiliza el segmento de aplicación # 0, con una cabecera de segmento que consiste en el ortografía de cadena de finalización nulo "JFIF" en ASCII seguida de un byte igual a 0, y especifica que este debe ser el primer segmento del fichero, por lo que es más sencillo reconocer un fichero JFIF. Las imágenes Exif registradas por cámaras digitales generalmente no incluyen este segmento, pero normalmente cumplen con el resto de la norma JFIF.

### Espacio de color

El estándar JPEG utilizado para la codificación de compresión en ficheros JFIF no define qué codificación de color se debe utilizar para las imágenes. JFIF define el modelo de color a utilizar: ya sea Y para escala de grises o YCbCr derivado primarias de color RGB tal como se definen en CCIR 601 (ahora conocido como Rec. UIT-R BT.601), excepto con una escala de "rango completo" diferente de los componentes Y, Cb y Cr. A diferencia del "rango de estudio" definido al CCIR 601, en el que el negro está representado por Y = 16 y el blanco para Y = 235 y los valores fuera de este rango están disponibles para el procesamiento de la señal "espacio libre" y "espacio libre", JFIF utiliza los 256 niveles de la representación de 8 bits, por lo que y = 0 para el negro y y = 255 para el blanco máximo. Las primarias de color RGB definidas a JFIF mediante CCIR 601 también difieren algo de lo que se ha convertido en práctica habitual en aplicaciones más recientes (por ejemplo, difieren ligeramente de las primarias de color definidas en sRGB ). Además, CCIR 601 (antes del 2007) no proporcionaba una definición precisa de las primarias de color RGB; en cambio, se basaba en las prácticas subyacentes de la industria televisiva.

La interpretación del color de una imagen JFIF se puede mejorar incrustando un perfil ICC, metadatos del espacio de colores o una etiqueta sRGB y mediante una aplicación que interpreta esta información.

## Estructura del formato de fichero

Un fichero JFIF consiste en una secuencia de marcadores o segmentos de marcadores (para obtener más información, consulte JPEG, sintaxis y estructura ). Los marcadores se definen en la parte 1 del estándar JPEG. Cada marcador consta de dos bytes: un FF seguido de un byte que no es igual a 00 o FF y especifica el tipo de marcador. Algunos marcadores son independientes, pero la mayoría indican el inicio de un segmento de marcador que contiene grupos de bytes de datos según el siguiente patrón:

FF xx s1 s2 [bytes de datos]

Los bytes s1 y s2 se toman juntos para representar un entero de 16 bits en formato big-endian que especifica la longitud de los siguientes "bytes de datos" más los 2 bytes utilizados para representar la longitud. En otras palabras, s1 y s2 especifican el número de los bytes de datos como $256\cdot s1+s2-2$.

Según la parte 1 del estándar JPEG, las aplicaciones pueden utilizar segmentos de marcador APP y definir un significado específico de la aplicación de los datos. En el estándar JFIF, se definen los siguientes segmentos de marcador APP, que se describen a continuación.:

* Segmento de marcador APP0 JFIF (segmento abreviado de JFIF) (obligatorio)
* Segmento de marcador de extensión JFIF APP0 (segmento JFXX para abreviar) (opcional)

El estándar JFIF requiere que el segmento del marcador JFIF APP0 siga inmediatamente el marcador SOI. Si se utiliza un segmento de marcador APP0 de extensión JFIF, debe seguir inmediatamente el segmento de marcador APP0 JFIF. Por lo tanto, un fichero JFIF tendrá la siguiente estructura:

Estructura de ficheros JFIF :

| segmento | código | Descripción |
| - | - | - |
| SOI | FF D8 | Inicio de la imagen |
| JFIF-APP0 | FF E0 s1 s2 4A 46 49 46 00... | véase más abajo |
| JFXX-APP0 | FF E0 s1 s2 4A 46 58 58 00... | opcional, véase más abajo |
| ... segmentos de marcador adicionales (por ejemplo, SOF, DHT, COM) |||
| SOS | FF DA | Inicio del escaneado |
| | datos de imagen comprimidos | |
| EOI | FF D9 | Final de la imagen |

### Segmento de marcador JFIF APP0

En el segmento obligatorio del marcador JFIF APP0 se especifican los parámetros de la imagen. Opcionalmente, se puede insertar una miniatura sin comprimir.

Segmento de marcador JFIF APP0 :

| campo | Tamaño (bytes) | Descripción |
| - | - | - |
| marcador APP0 | 2 | FF E0 |
| largo | 2 | Longitud del segmento excluyendo el marcador APP0 |
| identificador | 5 | 4A 46 49 46 00 = "JFIF" en ASCII, finalizado por un byte nulo |
| versión JFIF | 2 | Primer byte para versión mayor, segundo byte para versión menor (para 1:02) 01 02 |
| Unidades de densidad | 1 | Unidades para los siguientes campos de densidad de píxeles 00 : Sin unidades; ancho: altura proporción de píxeles = Ydensity: Xdensityy 01 : Píxeles por pulgada (2,54 cm) 02 : Píxeles por centímetro |
| Xdensity | 2 | Densidad horizontal de píxeles. No debe ser cero |
| Ydensity | 2 | Densidad de píxeles verticales. No debe ser cero |
| Xthumbnail | 1 | Recuento horizontal de píxeles de la siguiente miniatura RGB incrustada. Puede ser cero |
| Ythumbnail | 1 | Recuento de píxeles vertical de la siguiente miniatura RGB incrustada. Puede ser cero |
| Datos en miniatura | 3 × n | Datos de miniaturas RGB de 24 bits sin comprimir (8 bits por canal de color) en el orden R0, G0, B0,... Rn-1, Gn-1, Bn-1; con n = Xthumbnail × Ythumbnail |

### Segmento de marcador APP0 de extensión JFIF

Inmediatamente después del segmento de marcador APP0 JFIF puede haber un segmento de marcador APP0 de extensión JFIF. Este segmento sólo puede estar presente para versiones JFIF 01:02 y posteriores. Permite incrustar una imagen en miniatura en 3 formatos diferentes.

Segmento de marcador APP0 de extensión JFIF :

| campo | Tamaño (bytes) | Descripción |
| - | - | - |
| marcador APP0 | 2 | FF E0 |
| largo | 2 | Longitud del segmento excluyendo el marcador APP0 |
| identificador | 5 | 4A 46 58 58 00 = "JFXX" en ASCII, finalizado por un byte nulo |
| Formato de miniatura | 1 | Especifica qué formato de datos se utiliza para la miniatura incrustada siguiente: 10 : Formato JPEG 11 : Formato paletizado de 1 byte por píxel 13 : Formato RGB de 3 byte por píxel |
| Datos en miniatura | variable | Depende del formato de la miniatura, véase más abajo |

Los datos de miniaturas dependen del formato de miniatura de la siguiente manera:

Miniatura almacenada mediante la codificación JPEG :

| campo | Tamaño (bytes) | Descripción |
| - | - | - |
| SOI | 2 | FF D8 |
| | variable | Debe ser en formato JIF utilizando YCbCr o simplemente Y, y no debe contener segmentos JFIF o JFXX |
| EOI | 2 | FF D9 |

Miniatura almacenada con un byte por píxel :

| campo | Tamaño (bytes) | Descripción |
| - | - | - |
| Xthumbnail | 1 | Recuento horizontal de píxeles de la siguiente miniatura incrustada. No debe ser cero |
| Ythumbnail | 1 | Recuento de píxeles verticales de la miniatura incrustada siguiente. No debe ser cero |
| Paleta de miniaturas | 768 | 256 entradas de paleta, cada una con un valor de color RGB de 24 bits |
| Datos en miniatura | n | Un byte por píxel que contiene el índice del color dentro de la paleta, con n = Xthumbnail × Ythumbnail |

Miniatura almacenada con tres byte por píxel :

| campo | Tamaño (bytes) | Descripción |
| - | - | - |
| Xthumbnail | 1 | Recuento horizontal de píxeles de la siguiente miniatura incrustada. No debe ser cero |
| Ythumbnail | 1 | Recuento de píxeles verticales de la miniatura incrustada siguiente. No debe ser cero |
| Datos en miniatura | 3 × n | Datos de miniaturas RGB de 24 bits sin comprimir (8 bits por canal de color) en el orden R0, G0, B0,... Rn-1, Gn-1, Bn-1; con n = Xthumbnail × Ythumbnail |

## Compatibilidad

El nuevo formato de fichero de imagen intercambiable (Exif) es comparable a JFIF, pero los dos estándares son mutuamente incompatibles. Esto se debe a que ambos estándares especifican que su segmento de aplicación particular (APP0 para JFIF, APP1 por Exif) debe seguir inmediatamente el marcador SOI. En la práctica, muchos programas y cámaras digitales producen ficheros con los dos segmentos de aplicación incluidos. Esto no afectará a la decodificación de imágenes para la mayoría de los descodificadores, pero los analizadores JFIF o Exif mal diseñados pueden no reconocer el fichero correctamente.

JFIF es compatible con las extensiones JPEG "Bloque de Recursos de Información" de Adobe Photoshop los metadatos del modelo de intercambio de información IPTC, ya que JFIF no excluye otros segmentos de aplicación, y las extensiones de Photoshop no están obligadas a ser las primeras del fichero. Sin embargo, Photoshop generalmente ahorra memorias intermedias CMYK como "JPEG de Adobe" de cuatro componentes que no están conformes con JFIF. Dado que estos ficheros no se encuentran en un espacio de color YCbCr, normalmente no son descodibles por los navegadores web y otros programas de Internet.

## Historia

El desarrollo del documento JFIF fue dirigido por Eric Hamilton, de C-Cube Microsystems, y el acuerdo sobre la primera versión se estableció a finales de 1991 en una reunión celebrada en C-Cube que contó con aproximadamente 40 representantes de diversas empresas de informática, telecomunicaciones e imagen. Poco después se publicó una revisión menor: JFIF 1.01. Durante casi 20 años, la última versión disponible fue v1.02, publicada el 1 de septiembre de 1992.

En 1996, RFC 2046 especificó que el formato de imagen utilizado para transmitir imágenes JPEG a través de Internet debería ser JFIF. El tipo MIME de "imagen / jpeg" se codificará como JFIF. En la práctica, sin embargo, prácticamente todo el software de Internet puede decodificar cualquier imagen JIF de línea de base que utilice componentes Y o Y y C, tanto si cumple JFIF como si no.

Con el paso del tiempo, C-Cube se reestructuró (y finalmente se convirtió en Harmonic, LSI Logic, Magnum Semiconductor, Avago Technologies, Broadcom y GigOptix, GigPeak, etc.) y perdió el interés por el documento y la especificación no tenía ningún editor oficial hasta que fue recogido por Ecma International y el grupo conjunto de expertos fotográficos ITU-T / ISO / IEC hacia el 2009 para evitar que se perdiera en la historia y proporcionar una manera de citarlo formalmente en publicaciones estándar y mejorar la calidad editorial. Fue publicado por la ECMA en 2009 como informe técnico número 98 para evitar la pérdida del registro histórico, y fue formalizado formalmente por el UIT-T en 2011 como Recomendación T.871 y por la ISO / IEC 2013. como ISO / IEC 10918-5, Las publicaciones más recientes incluyen mejoras editoriales, pero no hay cambios técnicos sustanciales.

