O que é JFIF?

JFIF é uma convenção de intercâmbio que organiza dados de imagem comprimidos com JPEG em uma estrutura de arquivo definida. Ela especifica detalhes como alinhamento de componentes, interpretação de cores, densidade de pixels e proporção.

Como JFIF funciona

JFIF adiciona um conjunto pequeno e fixo de convenções a um fluxo JPEG para que decodificadores independentes o interpretem da mesma forma. Seu segmento de cabeçalho APP0, obrigatório imediatamente após o marcador de início de imagem, registra uma versão, uma densidade de pixels em pontos por polegada ou por centímetro (ou, com as unidades definidas como 0, apenas uma proporção de pixels) e uma miniatura opcional. A especificação também fixa a interpretação de cores em escala de cinza ou YCbCr de faixa completa, a ordem das amostras de cima para baixo e a posição das amostras de croma subamostradas em relação à luma. O arquivo continua sendo um fluxo JPEG baseado em marcadores, não um contêiner baseado em caixas, e outros segmentos de aplicação, como um perfil ICC em APP2, podem vir após o cabeçalho JFIF. A versão 1.02, de 1992, foi posteriormente formalizada como ITU-T T.871 e ISO/IEC 10918-5.

Informações essenciais

  1. Identifique JFIF pelos bytes, não pelo sufixo: o arquivo começa com SOI (FF D8), seguido imediatamente por um segmento APP0 (FF E0, seguido de um comprimento de dois bytes) cujos dados começam com a string terminada em zero JFIF (4A 46 49 46 00). Um JPEG cujo primeiro segmento seja qualquer outro, como o APP1 do Exif, não está em conformidade com JFIF, mesmo quando seu nome termina em .jpg ou .jfif. A correspondência dessa assinatura mostra apenas que um arquivo se declara JFIF: a conformidade também exige um fluxo de intercâmbio JPEG válido e as restrições de cabeçalho e quadro da cláusula 10.1 de T.871, como valores de densidade diferentes de zero e um ou três componentes com os identificadores 1, 2 e 3 para Y, Cb e Cr.
  2. JFIF abrange apenas imagens com um ou três canais de 8 bits cada: Y em escala de cinza ou YCbCr baseado em BT.601 e ajustado para a faixa completa de 0–255. JPEGs codificados em CMYK e RGB ficam fora desse escopo e são sinalizados por outras convenções, como o marcador APP14 da Adobe. A própria norma observa que isso oferece apenas fidelidade de cores básica e que um perfil ICC pode ser necessário para obter cores mais precisas.
  3. JFIF e Exif exigem, cada um, seu próprio segmento imediatamente após SOI (APP0 para JFIF, APP1 para Exif), portanto um arquivo não pode estar estritamente em conformidade com ambos. Mesmo assim, os programas que gravam esses arquivos os combinam, por exemplo, emitindo primeiro o APP0 do JFIF e depois o APP1 do Exif; essa ordem atende à regra de posicionamento do JFIF, mas não à do Exif. Por isso, um analisador deve percorrer todos os segmentos de aplicação e verificar a string identificadora de cada um, em vez de presumir uma única organização de metadados.
  4. Um cabeçalho JFIF pode incorporar uma miniatura RGB de 24 bits sem compressão, e a versão 1.02 adiciona segmentos de extensão JFXX para miniaturas codificadas em JPEG, baseadas em paleta ou em RGB. Exif define seu próprio mecanismo separado de miniaturas, portanto um fluxo de trabalho que precise localizar ou remover prévias incorporadas também deve examiná-lo. Esses não são os únicos lugares em que uma prévia pode estar: os blocos de recursos de imagem do Photoshop, por exemplo, podem conter outra miniatura.

Quando JFIF é importante

Analisadores podem encontrar JFIF tanto em arquivos .jpg comuns quanto em arquivos com a extensão .jfif. O software também deve levar em conta convenções de metadados como Exif, que não são totalmente compatíveis com JFIF.

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente