O que é PJPEG?
PJPEG geralmente se refere a JPEG progressivo, que armazena uma imagem em várias varreduras. Um decodificador pode mostrar uma versão pouco detalhada da imagem inteira antes que varreduras posteriores acrescentem detalhes mais finos.
Como o PJPEG funciona
Um JPEG progressivo divide as informações dos coeficientes em uma sequência de varreduras, em vez de codificar completamente cada região da imagem em uma única passagem. As primeiras varreduras estabelecem a estrutura geral em todo o quadro, e as posteriores fornecem detalhes adicionais de frequência ou precisão dos coeficientes. Ele continua fazendo parte do ecossistema JPEG convencional, então pode passar por pipelines comuns de arquivos fotográficos, mas o refinamento visível depende tanto do decodificador quanto do software de apresentação.
Informações essenciais
- JPEG progressivo é um modo do padrão JPEG, não um formato separado: os mesmos coeficientes DCT quantizados são distribuídos por várias varreduras, divididas por seleção espectral (faixas de coeficientes), aproximação sucessiva (bits mais significativos primeiro) ou ambas. Não se trata de uma pilha de miniaturas codificadas de forma independente. Um analisador pode ler o modo pelo marcador do cabeçalho do quadro:
FF C2(SOF2) para um arquivo progressivo com codificação Huffman,FF C0(SOF0) para o modo básico. - Nem a extensão do arquivo nem o tipo de mídia identificam o modo. Arquivos progressivos normalmente mantêm
.jpgou.jpegeimage/jpeg; a MDN também lista.pjpege.pjpcomo extensões JPEG.image/pjpegnão está no registro da IANA. Esse é o rótulo que a detecção de MIME do Internet Explorer retornava para dados JPEG em geral, por compatibilidade com versões anteriores, então um upload rotulado comoimage/pjpegnão é necessariamente progressivo, e uma lista de permissões que lida com esses clientes legados precisa tratá-lo como JPEG e inspecionar o conteúdo. - Decodificar um arquivo progressivo e mostrar suas passagens intermediárias são coisas distintas. O libjpeg-turbo retorna apenas a imagem final, a menos que o aplicativo use seu modo de imagem em buffer, e sua documentação diz que cada passagem exibida exige aproximadamente tanto processamento quanto decodificar uma imagem completa. Um arquivo com várias varreduras também precisa de um buffer de coeficientes para a imagem inteira, enquanto um arquivo com uma única varredura precisa apenas de buffers proporcionais à largura da imagem, e as ferramentas do libjpeg-turbo oferecem um limite de varreduras porque arquivos maliciosamente construídos com um número muito grande de varreduras podem consumir CPU em excesso. Planeje o uso de memória e limite a contagem de varreduras ao decodificar uploads não confiáveis.
- Com a mesma configuração de qualidade, um arquivo progressivo é decodificado para a mesma imagem final que um sequencial e tem aproximadamente o mesmo tamanho, frequentemente um pouco menor, segundo a documentação do libjpeg-turbo. Escolha-o pela exibição incremental, não pela economia de tamanho. O padrão não exige que as implementações ofereçam todos os modos, e alguns decodificadores embarcados, como o TJpgDec, oferecem suporte apenas ao modo básico.
Quando o PJPEG é relevante
Escolha JPEG progressivo quando uma visualização inicial durante o download de uma fotografia grande for útil. Os principais navegadores e bibliotecas de imagem decodificam varreduras progressivas de forma confiável, então reserve as verificações de compatibilidade para destinos com limitações, como decodificadores embarcados ou de hardware que implementam apenas JPEG de linha de base.
Como a Transloadit ajuda com PJPEG
O Robot /image/resize da Transloadit tem um parâmetro progressive que entrelaça a saída para que os navegadores possam mostrar uma versão de baixa resolução da imagem inteira antes que o restante dos dados chegue; ele fica desativado por padrão. A tabela de formatos de imagem também lista PJPEG ao lado de JPG e JPEG como um nome de formato que seus Robots baseados no ImageMagick podem ler e gravar.
A documentação do Robot informa um custo em tamanho de arquivo para progressive e não diz a quais formatos de saída a opção ou esse custo se aplica. A documentação do libjpeg-turbo descreve arquivos JPEG progressivos como tendo aproximadamente o mesmo tamanho dos sequenciais, muitas vezes um pouco menores, então faça medições com suas próprias imagens. A documentação não descreve o que muda ao escolher PJPEG como formato de saída em comparação com JPG.
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- ITU-T T.81 (JPEG): modos de operação, seleção espectral, aproximação sucessiva e marcadores de quadro
- libjpeg-turbo: documentação da biblioteca libjpeg, suporte a JPEG progressivo, modo de imagem em buffer e uso de memória
- libjpeg-turbo: uso de cjpeg, djpeg e jpegtran, incluindo -progressive e -maxscans
- Registro de tipos de mídia da IANA, tipos de imagem
- Microsoft: detecção de tipos MIME no Windows Internet Explorer, image/pjpeg
- MDN: guia de tipos e formatos de arquivos de imagem, extensões JPEG e suporte em navegadores
- Nota de aplicação do TJpgDec: limites de um decodificador embarcado com suporte apenas ao modo básico