Formato de intercambio de archivos JPEG - JPEG File Interchange Format

El formato de intercambio de archivos JPEG ( JFIF ) es un formato de archivo de imagen estándar. Define especificaciones complementarias para el formato contenedor que contiene los datos de imagen codificados con el algoritmo JPEG . Las especificaciones básicas para un formato contenedor JPEG se definen en el anexo B del estándar JPEG, conocido como formato de intercambio JPEG (JIF). JFIF se basa en JIF para resolver algunas de las limitaciones de JIF, incluida la complejidad innecesaria, el registro de muestras de componentes, la resolución, la relación de aspecto y el espacio de color . Dado que JFIF es un estándar complementario, el formato de archivo resultante puede denominarse "JPEG / JFIF".

JFIF es mutuamente incompatible con el formato de archivo de imagen intercambiable más reciente (Exif).

Objetivo

JFIF define una serie de detalles que no se especifican en el estándar JPEG Parte 1 ( ISO / IEC 10918-1, Recomendación UIT-T T.81).

Registro de muestra de componente

JPEG permite que varios componentes (como Y, Cb y Cr ) tengan diferentes resoluciones, pero no define cómo deben alinearse esas diferentes matrices de muestras. El estándar JFIF requiere que las muestras se ubiquen " intersticialmente ", lo que significa que el decodificador puede tratar cada matriz de componentes como si representara una matriz de píxeles rectangulares de igual tamaño muestreados en sus centros, con cada matriz teniendo los mismos límites exteriores que la imagen. Esto es conveniente para los usuarios de computadoras, pero no es la alineación utilizada en MPEG-2 y la mayoría de las aplicaciones de video.

Resolución y relación de aspecto

El estándar JPEG no incluye ningún método para codificar la resolución o la relación de aspecto de una imagen. JFIF proporciona información de resolución o relación de aspecto utilizando una extensión de segmento de aplicación a JPEG. Utiliza el segmento de aplicación n. ° 0, con un encabezado de segmento que consta de la cadena terminada en nulo que se escribe "JFIF" en ASCII seguida de un byte igual a 0, y especifica que este debe ser el primer segmento del archivo, lo que simplifica la tarea de reconocer un archivo JFIF. Las imágenes Exif grabadas por cámaras digitales generalmente no incluyen este segmento, pero generalmente cumplen en todos los demás aspectos con el estándar JFIF.

Espacio de color

El estándar JPEG utilizado para la codificación de compresión en archivos JFIF no define qué codificación de color se utilizará para las imágenes. JFIF define el modelo de color que se utilizará: ya sea Y para escala de grises, o YCbCr derivado de colores primarios RGB como se define 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 en CCIR 601, en el que el negro está representado por Y = 16 y el blanco por Y = 235 y los valores fuera de este rango están disponibles para el procesamiento de señales "headroom" y "footroom", JFIF usa los 256 niveles de la representación de 8 bits, de modo que Y = 0 para negro e Y = 255 para blanco pico. Los colores primarios RGB definidos en JFIF a través de CCIR 601 también difieren algo de lo que se ha convertido en una práctica común en aplicaciones más nuevas (por ejemplo, difieren ligeramente de los colores primarios definidos en sRGB ). Además, el CCIR 601 (antes de 2007) no proporcionaba una definición precisa de los colores primarios RGB; en cambio, se basó en las prácticas subyacentes de la industria de la televisión.

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

Estructura de formato de archivo

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

FF xx s1 s2 [data bytes]

Los bytes s1 y s2 se toman juntos para representar un entero big-endian de 16 bits 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 siguientes bytes de datos como .

De acuerdo con la parte 1 del estándar JPEG, las aplicaciones pueden usar segmentos de marcadores de APP y definir un significado específico de los datos de la aplicación. En el estándar JFIF, se definen los siguientes segmentos de marcadores de APP:

  • Segmento marcador JFIF APP0 (segmento JFIF para abreviar) (obligatorio)
  • Extensión JFIF segmento marcador APP0 (segmento JFXX para abreviar) (opcional)

Se describen a continuación.

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

Estructura de archivos JFIF
Segmento Código Descripción
ASIQUE FF D8 Inicio de imagen
JFIF-APP0 FF E0 s1 s2 4A 46 49 46 00 ... vea abajo
JFXX-APP0 FF E0 s1 s2 4A 46 58 58 00 ... opcional, ver a continuación
… Segmentos de marcador adicionales
(por ejemplo, SOF, DHT, COM)
llamada de socorro FF DA Inicio de escaneo
datos de imagen comprimidos
EOI FF D9 Fin de imagen

Segmento marcador JFIF APP0

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

Segmento 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 , terminado por un byte nulo
Versión JFIF 2 Primer byte para la versión principal, segundo byte para la versión secundaria ( 01 02para 1.02)
Unidades de densidad 1 Unidades para los siguientes campos de densidad de píxeles
Densidad 2 Densidad de píxeles horizontal. No debe ser cero
Ydensidad 2 Densidad de píxeles vertical. No debe ser cero
Xminiatura 1 Recuento de píxeles horizontales de la siguiente miniatura RGB incrustada. Puede ser cero
Miniatura 1 Recuento de píxeles verticales de la siguiente miniatura RGB incrustada. Puede ser cero
Datos en miniatura 3 × n Datos en miniatura ráster 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 = Xminiatura × Yminiatura

Segmento marcador APP0 de extensión JFIF

Inmediatamente después del segmento de marcador de APP0 de JFIF puede haber un segmento de marcador de APP0 de extensión de JFIF. Este segmento solo puede estar presente para las versiones JFIF 1.02 y superiores. Permite incrustar una imagen en miniatura en 3 formatos diferentes.

Segmento 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 , terminado por un byte nulo
Formato de miniatura 1 Especifica qué formato de datos se utiliza para la siguiente miniatura incrustada:
  • 10 : Formato JPEG
  • 11 : Formato paletizado de 1 byte por píxel
  • 13 : Formato RGB de 3 bytes por píxel
Datos en miniatura variable Depende del formato de miniatura, ver más abajo

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

Miniatura almacenada con codificación JPEG
Campo Tamaño (bytes) Descripción
ASIQUE 2 FF D8
variable Debe ser formato JIF usando YCbCr o solo Y, y no debe contener segmentos JFIF o JFXX
EOI 2 FF D9
Miniatura almacenada usando un byte por píxel
Campo Tamaño (bytes) Descripción
Xminiatura 1 Recuento de píxeles horizontales de la siguiente miniatura incrustada. No debe ser cero
Miniatura 1 Recuento de píxeles verticales de la siguiente miniatura incrustada. 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 norte Un byte por píxel que contiene el índice del color dentro de la paleta,

con n = Xminiatura × Yminiatura

Miniatura almacenada con tres bytes por píxel
Campo Tamaño (bytes) Descripción
Xminiatura 1 Recuento de píxeles horizontales de la siguiente miniatura incrustada. No debe ser cero
Miniatura 1 Recuento de píxeles verticales de la siguiente miniatura incrustada. No debe ser cero
Datos en miniatura 3 × n Datos en miniatura ráster 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 = Xminiatura × Yminiatura

Compatibilidad

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

JFIF es compatible con las extensiones JPEG "Information Resource Block" de Adobe Photoshop y los metadatos del Modelo de intercambio de información IPTC , ya que JFIF no excluye otros segmentos de la aplicación y no es necesario que las extensiones de Photoshop sean las primeras en el archivo. Sin embargo, Photoshop generalmente guarda búferes CMYK como "Adobe JPEG" de cuatro componentes que no cumplen con JFIF. Dado que estos archivos no están en un espacio de color YCbCr, por lo general, los navegadores web y otros programas de Internet no pueden decodificarlos.

Historia

El desarrollo del documento JFIF estuvo a cargo de Eric Hamilton de C-Cube Microsystems , y el acuerdo sobre la primera versión se estableció a fines de 1991 en una reunión celebrada en C-Cube en la que participaron unos 40 representantes de varias empresas de informática, telecomunicaciones e imágenes. Poco después, se publicó una revisión menor: JFIF 1.01. Durante casi 20 años, la última versión disponible fue la 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 "image / jpeg" debe codificarse como JFIF. Sin embargo, en la práctica, prácticamente todo el software de Internet puede decodificar cualquier imagen JIF de línea base que utilice componentes Y o YCbCr, ya sea compatible con JFIF o 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ó interés en el documento, y la especificación no tenía un editor oficial. hasta que fue recogido por Ecma International y el Grupo Conjunto de Expertos en Fotografía UIT-T / ISO / IEC alrededor de 2009 para evitar que se pierda en la historia y proporcionar una forma de citarlo formalmente en publicaciones estándar y mejorar su calidad editorial. Fue publicado por ECMA en 2009 como Informe Técnico número 98 para evitar la pérdida del registro histórico, y fue estandarizado formalmente por ITU-T en 2011 como su Recomendación T.871 y por ISO / IEC en 2013 como ISO / IEC 10918- 5. Las publicaciones más recientes incluyeron mejoras editoriales pero no cambios técnicos sustanciales.

Ver también

Referencias

Otras lecturas

Libros

Estándares