O que é um canal alfa?

Um canal alfa armazena a transparência de cada pixel separadamente dos canais de cor de uma imagem. Seus valores representam uma cobertura totalmente transparente, totalmente opaca ou parcialmente transparente.

Como funcionam os canais alfa

Um valor alfa registra o grau de opacidade de um pixel. Em PNG, zero significa totalmente transparente e o valor máximo de amostra significa totalmente opaco; valores intermediários indicam cobertura parcial, como ao longo de uma borda suave. Um compositor mistura cada pixel do primeiro plano com o que está atrás dele na proporção indicada pelo alfa. A cor junto ao alfa pode ser armazenada de duas maneiras. O alfa direto, também chamado de não pré-multiplicado ou não associado, mantém a cor integral junto ao seu valor alfa. O alfa pré-multiplicado, ou associado, armazena a cor já multiplicada pelo alfa, o que simplifica a fórmula de composição. No exemplo do Padrão HTML, o amarelo semitransparente é 255, 255, 0, 127 com alfa direto e 127, 127, 0, 127 com alfa pré-multiplicado. Arquivos PNG armazenam alfa direto, bitmaps de saída do canvas 2D do HTML usam alfa pré-multiplicado, e TIFF pode conter qualquer uma das formas, com uma tag que indica qual delas é usada. O software precisa saber qual forma está lendo, e a conversão entre as duas causa perdas em pixels que não são totalmente opacos.

Informações essenciais

  1. O que dá errado quando o alfa direto e o pré-multiplicado são confundidos? As bordas suaves mudam de cor. Dados pré-multiplicados compostos como alfa direto têm sua cor multiplicada pelo alfa uma segunda vez, fazendo as bordas parcialmente transparentes escurecerem. Dados de alfa direto tratados como pré-multiplicados são adicionados com intensidade total, fazendo as bordas parecerem claras demais. Pixels totalmente opacos são idênticos nas duas formas, por isso o erro aparece como um contorno ao redor dos recortes, e não nas áreas sólidas. Ferramentas que aceitam ambas as formas oferecem uma configuração: o filtro overlay do FFmpeg, por exemplo, tem uma opção alpha com os valores straight, premultiplied e auto.
  2. Por que um recorte ganha um halo após o redimensionamento? Com alfa direto, um pixel totalmente transparente ainda armazena uma cor, e um filtro que calcula a média de cada canal separadamente mistura essa cor oculta aos pixels vizinhos da borda. A solução usual é pré-multiplicar, redimensionar e depois converter de volta. Nem toda ferramenta faz isso por você: a documentação do libvips informa que sua operação de redimensionamento não pré-multiplica o alfa e orienta quem a chama a fazer isso primeiro.
  3. Quais formatos de imagem estática preservam o alfa? PNG armazena um canal alfa completo nos tipos de cor verdadeira com alfa e de tons de cinza com alfa; nos demais casos, pode atribuir um valor alfa próprio a cada entrada da paleta ou marcar uma única cor como totalmente transparente. WebP pode armazenar alfa em arquivos tanto sem perdas quanto com perdas; no caso com perdas, é necessária a estrutura estendida do arquivo. GIF não tem canal alfa: um índice da paleta pode ser marcado como transparente, portanto cada pixel é desenhado ou ignorado. JPEG não tem canal alfa, e os conversores diferem na forma de substituir a transparência. Alguns compõem a imagem sobre uma cor de fundo. Outros apenas descartam o canal alfa, deixando a cor que os pixels transparentes armazenavam: a documentação do ImageMagick descreve sua saída JPEG como equivalente a -alpha off, com fundos transparentes normalmente se tornando pretos. Para um resultado previsível, componha a imagem sobre um fundo escolhido por você antes da codificação. Os padrões dessa etapa também variam: flatten do sharp, por exemplo, usa preto por padrão.
  4. A extensão de um arquivo de vídeo indica se ele tem alfa? Não. O alfa depende do codec e de seu perfil. Entre os codecs Apple ProRes, somente ProRes 4444 e ProRes 4444 XQ suportam um canal alfa, portanto dois arquivos com a mesma extensão podem diferir. VP8 e VP9 podem conter alfa, mas a MDN observa que o Safari não suporta transparência alfa em nenhum dos dois. Também pode ser necessário configurar o codificador para gravar o alfa: o codificador prores_ks do FFmpeg tem uma opção alpha_bits cujo valor 0 desativa o plano alfa.

Quando os canais alfa são importantes

Preserve o alfa ao compor logotipos, recortes, sobreposições ou animações transparentes sobre outros conteúdos. Um codec ou formato sem suporte a alfa descartará a transparência ou exigirá a escolha de um fundo.

Como a Transloadit ajuda com canais alfa

O Robot /image/resize da Transloadit altera o fundo de imagens transparentes para branco por padrão; sua documentação orienta definir background como none para preservar a transparência. O format de saída ainda precisa ser um formato capaz de armazenar alfa. O parâmetro alpha do Robot controla o canal diretamente, e solicitar has_transparency por meio de output_meta informa se uma imagem contém partes transparentes, o que ajuda a escolher um formato de saída para cada arquivo. O Robot /image/bgremove remove fundos e grava em PNG por padrão.

Essas duas páginas não informam se o redimensionamento usa alfa direto ou pré-multiplicado. Se a qualidade das bordas for importante, redimensione um recorte com bordas suaves, coloque-o sobre um fundo contrastante e inspecione o resultado antes de processar uma coleção inteira.

Explore os recursos de imagem da Transloadit

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