O que é PNG?
Portable Network Graphics (PNG) é um formato de imagem raster com compressão sem perdas. Ele armazena imagens com cores indexadas (paleta), em escala de cinza ou RGB com 1 a 16 bits por amostra, cada uma opcionalmente com transparência alfa, e não tem um tipo de cor CMYK.
Como o PNG funciona
Um fluxo de dados PNG consiste em uma assinatura de oito bytes seguida de blocos, cada um composto por um comprimento, um tipo de quatro letras, dados e um CRC. Quatro tipos de bloco são críticos: IHDR (dimensões, profundidade de bits e tipo de cor), PLTE (a paleta de uma imagem com cores indexadas), IDAT (os pixels comprimidos) e IEND. Antes da compressão, o codificador adiciona ao início de cada linha de varredura um byte de tipo de filtro que seleciona a ausência de filtragem ou um de quatro filtros que armazenam cada byte como sua diferença em relação a uma previsão baseada em bytes vizinhos; o fluxo filtrado é então comprimido com DEFLATE, o único método de compressão definido pela especificação. Ambas as etapas são reversíveis, então a decodificação retorna exatamente as amostras que foram codificadas. Blocos auxiliares contêm informações opcionais, como espaço de cor (sRGB, iCCP, cICP), densidade de pixels (pHYs), texto e metadados Exif (eXIf). Um decodificador pode ignorar um bloco auxiliar que não reconheça, mas deve informar a presença de um bloco crítico desconhecido em vez de ignorá-lo silenciosamente.
Informações essenciais
- A compressão PNG é sem perdas, então as configurações de seleção de filtros e DEFLATE equilibram tempo de codificação e tamanho de arquivo, sem nunca alterar os pixels decodificados. Um otimizador sem perdas também pode reduzir um arquivo removendo blocos de metadados ou adotando uma representação mais compacta dos mesmos pixels, como eliminar um canal alfa totalmente opaco, então um arquivo menor, por si só, não indica que os pixels mudaram. Quantizadores de paleta como pngquant, ou opções de codificador como
palettedo sharp, geram um PNG válido com cores indexadas de no máximo 256 cores, cujos pixels podem diferir dos originais. - Para imagens coloridas com 256 cores ou menos, a especificação PNG diz que quase sempre se deve usar cores indexadas, pois a representação em cores reais provavelmente será muito maior. A conversão é exata quando a imagem tem no máximo 256 valores distintos de pixel, contando o alfa, com 8 bits por amostra ou menos. Para fotografias, o formato não oferece um modo com perdas como alternativa: o guia de formatos da MDN recomenda PNG para capturas de tela, diagramas e desenhos de linhas, e um formato com perdas para fotografias. Além disso, um relato público de problema no sharp descreve um PNG que ficou maior que o JPEG original após a redução das dimensões.
- A transparência tem três formas. Os tipos de cor 4 e 6 contêm um canal alfa completo com 8 ou 16 bits por amostra. Uma imagem com cores indexadas pode listar um valor alfa por entrada da paleta em um bloco
tRNS, então um PNG com paleta pode ter transparência parcial. Para imagens em escala de cinza e em cores reais sem canal alfa,tRNSsó pode marcar um único valor de cor como totalmente transparente. O alfa armazenado não é pré-multiplicado nas amostras de cor. - PNG não pode conter dados CMYK. As imagens coloridas são RGB ou baseadas em paleta, um perfil ICC incorporado deve ser um perfil RGB (ou um perfil de escala de cinza para imagens em escala de cinza), e a especificação orienta os autores de extensões a não adicionar blocos que reinterpretam RGB como CMYK. Os blocos de espaço de cor (
sRGB,iCCP,cICPougAMAcomcHRM) são opcionais; sem eles, a especificação trata as amostras como cores não calibradas e dependentes do dispositivo, então verifique se uma ferramenta que remove blocos auxiliares preserva aqueles dos quais suas cores dependem.
Quando o PNG é relevante
Escolha PNG para capturas de tela, diagramas, desenhos de linhas e outros gráficos com contornos nítidos, ou para recursos cuja transparência e cujos pixels exatos precisem ser preservados na codificação. Fotografias e outras imagens de tons contínuos geralmente toleram compressão com perdas, então um formato com perdas costuma ser a escolha nesses casos; PNG preserva cada amostra, o que muitas vezes aumenta o tamanho do arquivo nessas imagens.
Como a Transloadit ajuda com PNG
A tabela de formatos de imagem da Transloadit lista PNG como um formato que seus Robots baseados no ImageMagick podem ler e gravar, e /image/resize inclui png entre seus formatos de saída. /image/optimize reduz arquivos PNG com compressores sem perdas por padrão; configurar lossy: true também permite que o pngquant concorra, reduzindo a imagem a uma paleta de 256 cores.
Com lossy: true, vence o menor dos resultados com e sem perdas, então a saída continua sendo um arquivo PNG, mas já não há garantia de que seus pixels sejam idênticos aos da entrada; a documentação do Robot alerta que podem ocorrer alterações nas cores.
- Formatos de imagem por stack do ImageMagick
- Robot de redimensionamento de imagens
- Robot de otimização de imagens
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- Especificação PNG do W3C (terceira edição): estrutura dos blocos (seção 5.3), filtragem (9), tipos de cor e profundidades de bits do IHDR (11.2.1), tRNS (11.3.1.1), iCCP (11.3.2.3), seleção de filtros (seção 12.7)
- MDN: guia de tipos e formatos de arquivos de imagem (seção sobre PNG e orientações sobre fotografias em comparação com desenhos de linhas)
- Opções de saída do sharp: nível de compressão, filtragem adaptativa e quantização de paleta de png()
- Problema #2213 do sharp: o PNG resultante é maior que o JPEG original ao reduzir as dimensões