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).
Propósito
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). [1]
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á: 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 utiliza 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 . [1] Cada marcador consta de dos bytes: un FF
byte 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 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. [2] 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 02 para 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:
|
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 tener 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. [3] Durante casi 20 años, la última versión disponible fue la v1.02, publicada el 1 de septiembre de 1992. [2]
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 manera 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, [3] y fue estandarizado formalmente por ITU-T en 2011 como su Recomendación T.871 [4] y por ISO / IEC en 2013 como ISO / IEC 10918-5, [5] Las publicaciones más recientes incluyeron mejoras editoriales pero no cambios técnicos sustanciales.
Ver también
- Joint Photographic Experts Group
Referencias
- ^ a b "Recomendación UIT-T T.81: Tecnología de la información - Compresión digital y codificación de imágenes fijas de tono continuo - Requisitos y directrices" (PDF) . ITU-T (anteriormente CCITT) . 18 de febrero de 1992 . Consultado el 15 de junio de 2015 .
- ^ a b Hamilton, Eric (12 de septiembre de 1992). "Formato de intercambio de archivos JPEG, versión 1.02" (pdf, 0.02 MB) . Consultado el 15 de junio de 2015 .
- ^ a b "Formato de intercambio de archivos JPEG (JFIF)" . ecma-international.org . 2009 . Consultado el 15 de junio de 2015 .
- ^ "Recomendación UIT-T T.871: Tecnología de la información - Compresión digital y codificación de imágenes fijas de tono continuo: formato de intercambio de archivos JPEG (JFIF)" (PDF) . ITU-T. 14 de mayo de 2011 . Consultado el 15 de junio de 2015 .
- ^ "ISO / IEC 10918-5: 2013: Tecnología de la información - Compresión digital y codificación de imágenes fijas de tono continuo: Formato de intercambio de archivos JPEG (JFIF)" . ISO / Comisión Electrotécnica Internacional. 1 de mayo de 2013 . Consultado el 15 de junio de 2015 .
Otras lecturas
Libros
- Miano, John M, "Formatos de archivo de imagen comprimida"; 1999, Addison-Wesley ISBN 978-0-201-60443-6
- Pennebaker, William B. y Joan L. Mitchell : estándar de compresión de datos de imágenes fijas JPEG ; 3a edición, 1993, Springer ISBN 978-0-442-01272-4
Estándares
- Hamilton, Eric: Formato de intercambio de archivos JPEG, versión 1.02 (PDF, 0,02 MB) 1 de septiembre de 1992
- Recomendación UIT-T T.871: Tecnología de la información - Compresión digital y codificación de imágenes fijas de tono continuo: Formato de intercambio de archivos JPEG (JFIF) (PDF y Microsoft Word, 0,2 MB) Aprobado el 14 de mayo de 2011; publicado el 11 de septiembre de 2012
- Recomendación UIT-T T.81: Tecnología de la información - Compresión digital y codificación de imágenes fijas de tono continuo - Requisitos y directrices (PDF y Microsoft Word, 1,5 MB) Aprobado el 18 de septiembre de 1992; publicado el 14 de abril de 2004