O que o 1.4.5 exige

Se as tecnologias que estiverem sendo utilizadas puderem proporcionar a apresentação visual, é utilizado texto para transmitir informações em vez de imagens de texto exceto para o seguinte:

Personalizável
A imagem de texto pode ser visualmente personalizada de acordo com os requisitos do usuário;
Essencial
Uma determinada apresentação de texto é essencial para as informações que serão transmitidas.

Nota Os logotipos (texto que faz parte de um logotipo ou marca comercial) são considerados essenciais.

Critério de sucesso 1.4.5 Imagens de Texto (Nível AA), citado da tradução autorizada para o português do Brasil das Diretrizes de Acessibilidade para Conteúdo Web (WCAG) 2.2, publicada em 27 de março de 2025 pelo Ceweb.br. Copyright © 2020-2023 World Wide Web Consortium. Usado sob a Licença de Documentos do W3C. A WCAG 2.1 não tem tradução autorizada, e este critério tem o mesmo texto na 2.1 e na 2.2. Em caso de divergência, vale o original em inglês.
Texto original, em inglês (WCAG 2.1)

If the technologies being used can achieve the visual presentation, text is used to convey information rather than images of text except for the following:

Customizable
The image of text can be visually customized to the user's requirements;
Essential
A particular presentation of text is essential to the information being conveyed.

Note Logotypes (text that is part of a logo or brand name) are considered essential.

Web Content Accessibility Guidelines (WCAG) 2.1, Recomendação do W3C de 6 de maio de 2025. Copyright © 2020-2025 World Wide Web Consortium.

Pessoas com baixa visão, dificuldade de leitura ou dificuldade de acompanhar as linhas mudam a aparência do texto: tamanho maior, outra fonte, outras cores, mais espaço entre as linhas. Texto de verdade segue esses ajustes. Uma figura de texto não segue, e fica borrada quando ampliada. O Understanding 1.4.5 (em inglês) pede que quem consegue a aparência desejada com texto e CSS use texto.

Imagem de texto é texto renderizado como figura para obter um efeito visual. Texto que faz parte de uma figura com outro conteúdo visual significativo, como um gráfico, uma captura de tela ou um diagrama, não é imagem de texto. Logotipos são permitidos, assim como texto cuja aparência exata é o que importa, como uma amostra de fonte ou uma carta antiga, e uma imagem de texto que o usuário pode personalizar.

Quando o mesmo texto também está na página como texto de verdade, o 1.4.5 é cumprido. O 1.4.9, mais rigoroso e de nível AAA, só permite imagens de texto como pura decoração ou quando a aparência é essencial. A figura continua precisando de alternativa em texto, que é o 1.1.1.

Falhas comuns

Abaixo de cada exemplo: o que o axe-core e o Rampa relataram sobre a marcação de antes da correção, numa execução com o Gemma 4 12B em 9 de outubro de 2026.

Um título de seção desenhado como figura

O título da seção é uma figura de palavras em itálico com serifa. Quem amplia o texto ou troca a fonte por uma que lê melhor recebe a mesma figura pequena, borrada no zoom. Uma fonte web e algumas linhas de CSS dão a mesma aparência.

Ilustração: as palavras “Nossa história” em itálico com serifa, marrom-escuro, sublinhadas em cobre.

Antes, reprova no 1.4.5

<h2>
  <img src="nossa-historia.svg" alt="Nossa história"
       width="360" height="90">
</h2>

Depois, aprova

<h2 class="titulo-historia">Nossa história</h2>
axe-core

Aprova: a image-alt encontra um alt, e nenhuma regra olha o que a figura mostra.

Rampa
✗ html > body > main > section > h2 > img
  A imagem mostra o texto "Nossa história" como figura; use texto real, estilizado com CSS.
  Evidência: "Nossa história"
  Patch:
    - <img src="nossa-historia.svg" alt="Nossa história" width="360" height="90">
    + <span>Nossa história</span>
  confiança alta · 1/1 rodadas · evidência verificada · id 6b341ea6bf56

O patch põe as palavras no lugar da figura, dentro do mesmo h2. A aparência volta com CSS, que o patch não escreve.

Uma promoção que é só texto

A oferta é o banner inteiro: duas linhas de texto sobre um fundo colorido, com alguns grãos de café num canto. O alt repete as palavras, o que atende ao 1.1.1, mas as palavras continuam sem poder ser ampliadas ou reestilizadas.

Ilustração: um banner verde-petróleo escuro que diz “FRETE GRÁTIS em pedidos acima de R$ 150” em amarelo e branco, com três grãos de café num canto.

Antes, reprova no 1.4.5

<img src="frete-gratis.svg"
     alt="Frete grátis em pedidos acima de R$ 150"
     width="600" height="140">

Depois, aprova

<p class="promo">
  <strong>Frete grátis</strong>
  em pedidos acima de R$ 150
</p>
axe-core

Aprova: a image-alt encontra um alt.

Rampa
✗ html > body > main > img
  A imagem mostra o texto "FRETE GRÁTIS em pedidos acima de R$ 150" como figura; use texto real, estilizado com CSS.
  Evidência: "FRETE GRÁTIS em pedidos acima de R$ 150"
  Patch:
    - <img src="frete-gratis.svg" alt="Frete grátis em pedidos acima de R$ 150" width="600" height="140">
    + <span>FRETE GRÁTIS em pedidos acima de R$ 150</span>
  confiança alta · 1/1 rodadas · evidência verificada · id 478d1c24a780

Um botão de imagem com uma palavra

O botão de inscrição é uma figura da palavra “Inscrever-se”. Um button com texto fica igual com CSS e segue os ajustes de texto de quem usa.

Ilustração: um botão laranja de cantos arredondados com a palavra “Inscrever-se” em branco.

Antes, reprova no 1.4.5

<input type="image" src="inscrever-se.svg"
       alt="Inscrever-se" width="180" height="52">

Depois, aprova

<button type="submit">Inscrever-se</button>
axe-core

Aprova: a input-image-alt encontra um alt.

Rampa
✗ html > body > main > form > input:nth-of-type(2)
  A imagem mostra o texto "Inscrever-se" como figura; use texto real, estilizado com CSS.
  Evidência: "Inscrever-se"
  Patch:
    - <input type="image" src="inscrever-se.svg" alt="Inscrever-se" width="180" height="52">
    + <button type="submit">Inscrever-se</button>
  confiança alta · 1/1 rodadas · evidência verificada · id 9c87e0d94440

O que o axe-core verifica

O axe-core 4.14.0 não tem regra para o 1.4.5. Saber se uma figura é quase só texto é uma pergunta sobre pixels, e o axe-core lê marcação e estilos. As regras mapeadas para o 1.1.1, como a image-alt e a input-image-alt, conferem se a figura tem alternativa em texto, o que não diz nada sobre se ela deveria ser texto.

Um título, uma promoção ou um botão desenhado como figura passa em todas as regras do axe-core, desde que tenha alternativa.

O que o Rampa julga, e como

O que vai para o modelo

Nada, a menos que o 1.4.5 seja pedido com --criteria. Aí, toda figura renderizada maior que um ícone, com mais de 40 px de lado: img, botões de imagem, canvas com nome, elementos com role="img" sem texto próprio e imagens de fundo em CSS, capturadas com o conteúdo do elemento escondido para julgar só a figura. SVG embutido fica de fora, porque o texto dele é texto de verdade, assim como qualquer figura cuja alternativa, nome de arquivo, id ou classe diga que é um logotipo.

O que o modelo vê

  • A figura como aparece na página.
  • Como ela é desenhada (um img, um botão de imagem, um canvas, um fundo em CSS ou role="img") e o tamanho renderizado.
  • A alternativa em texto e o nome do arquivo.
  • O nome do link ou botão a que ela pertence.
  • O texto visível do contêiner mais próximo em volta dela. Alternativas ficam de fora, porque ninguém as vê.

O que ele precisa responder

O que a figura mostra, numa frase; cada palavra de texto dela, transcrita exatamente, como evidência; a exceção que se aplica (sem texto, texto incidental numa foto, gráfico ou captura de tela, logotipo, aparência essencial, símbolo ou decoração) ou nenhuma; um veredito e um grau de confiança.

O que derruba uma alegação

  • Uma reprovação transcreve menos de três letras: um caractere solto ou um par de iniciais é símbolo ou monograma, como o “B” de negrito do documento Understanding.
  • Uma reprovação aponta exceção, ou uma aprovação não aponta nenhuma.
  • Uma alternativa descritiva, com três palavras de conteúdo ou mais, não tem nenhuma palavra em comum com a transcrição, então uma das duas descreve outra figura.
  • A alternativa ou o nome do arquivo chama a figura de captura de tela, gráfico, diagrama ou mapa.
  • As mesmas palavras aparecem como texto de verdade ao lado da figura, o que o documento Understanding diz que cumpre o critério.
  • A transcrição passa de 600 caracteres, longa demais para ser o texto de uma figura.

O patch

Troca um img por um span com o texto dele, e um botão de imagem por um button; a aparência volta com CSS. Fundos e canvas não recebem patch: o texto entra à mão.

Em todo critério

  • O conteúdo da página chega ao modelo marcado como dado, e o prompt manda ignorar qualquer instrução que esteja nele.
  • As respostas ficam em cache por um hash do prompt, da imagem, do modelo e das configurações, então a mesma entrada nunca chama um modelo duas vezes.
  • Com --runs 3, o Rampa pergunta três vezes e fica com a maioria; quando as rodadas discordam, a confiança cai. Achados abaixo de --min-confidence (média por padrão) ficam ocultos, e o --verbose lista todos.
  • Alegações derrubadas pela verificação são contadas em todo relatório, nunca mostradas como achados.

Como o Rampa foi medido nele

Casos de teste ACT do W3C para o 1.4.5: precisão, recall e F1, com o Gemma 4 12B numa GPU local
ConjuntoTestaCasosaxe-core, precisão / recallRampa, precisão / recall / F1
1.4.5, imagem não contém texto (ACT 0va7u6)significado15não definida, nada apontado / 0,001,00 / 0,60 / 0,75

Pares corrompidos: o Rampa separou 4 de 4 (texto desenhado como imagem), o axe-core 0. Um par é uma página de teste que passa e uma cópia quebrada de propósito; quem dá o mesmo veredito às duas não está julgando.

Rodada em 9 de outubro de 2026: axe-core 4.14.0, Gemma 4 12B numa GPU local, raciocínio desligado, uma rodada, casos de teste ACT a9a1483e. Amostras pequenas e uma rodada só: leia os números como um pipeline que funciona, não como resultado.

Leia com estas ressalvas

  • Na regra ACT 0va7u6, o Rampa achou 3 de 5 falhas, sem nenhum falso positivo. Um dos erros é uma discordância de propósito: o caso de teste mostra “Welcome” como imagem acima do parágrafo “Welcome to our website”, o que a ACT conta como falha e o documento Understanding como cumprido. O outro é erro do modelo: o texto “WCAG Rocks” lido como logotipo.
  • O prompt foi revisado depois de ler os erros de rodadas anteriores nesses casos, sem copiar as páginas de teste para ele. Leia os números como um pipeline que funciona, não como resultado.

Método e análise de erros no README (em inglês)

Limitações

  • Vem desligado. Ele soma uma chamada com visão para cada figura maior que um ícone, além do trabalho com imagens que o 1.1.1 já faz, e se um banner que junta a foto de um produto com uma chamada é imagem de texto ainda divide as pessoas.
  • Banners que juntam a foto de um produto com uma oferta ou uma chamada são apontados quando o texto domina. Equipes que os leem como figuras com outro conteúdo significativo podem dispensar o achado.
  • A transcrição é a leitura do modelo e pode errar em letras miúdas.
  • Em páginas reais, apontou slogans e títulos desenhados em mozilla.org e banners de carrossel em kabum.com.br, e nada em 17 fotos da BBC News nem nas capturas de tela de uma página do GitHub Docs.
  • Precisa de um modelo com visão, como o 1.1.1.

Perguntas sobre o 1.4.5

Um logotipo com texto é imagem de texto?

É, mas a WCAG permite: logotipos, texto que faz parte de um logotipo ou marca comercial, são considerados essenciais. O Rampa pula qualquer figura cuja alternativa, nome de arquivo, id ou classe diga que é um logotipo, e o modelo também pode responder que o texto é um logotipo.

Uma imagem de texto está certa se o alt repete o texto?

Para o 1.1.1, sim. Para o 1.4.5, não: leitores de tela leem o alt, mas quem amplia ou reestiliza o texto continua vendo uma figura fixa. O 1.4.5 é cumprido quando o mesmo texto também está na tela como texto de verdade.

Um banner com a foto de um produto e uma chamada reprova no 1.4.5?

Depende, e há quem discorde. Texto que faz parte de uma figura com outro conteúdo visual significativo não é imagem de texto. O Rampa aponta um banner assim quando o texto domina; se a sua equipe o lê como figura, dispense o achado com um motivo.

Por que o Rampa não verifica o 1.4.5 por padrão?

Ele soma uma chamada com visão para cada figura maior que um ícone, o que dobra o trabalho com imagens que o 1.1.1 já faz, e a fronteira entre imagem de texto e figura com texto ainda é discutida. Rode com --criteria 1.4.5, ou junte-o a uma lista de critérios.

O axe-core acha imagens de texto?

Não. Nenhuma regra do axe-core é mapeada para o 1.4.5: ler as palavras de uma figura exige visão.

Verifique suas páginas

O Rampa ainda não está no npm. Clone e rode a partir do código, com Node.js 22.12 ou mais novo e Chrome ou Edge. O 1.4.5 só roda quando pedido: o --criteria 1.4.5 julga só este critério, e uma lista como --criteria 1.1.1,1.4.5 o junta a outros.

Com o Ollama rodando, o Rampa escolhe um modelo local sozinho; o node dist/cli.mjs doctor diz o que falta.

git clone https://github.com/guilhermebsantiago/rampa-cli.git
cd rampa-cli
pnpm install && pnpm build
node dist/cli.mjs check https://example.com --criteria 1.4.5

Conferido com o rampa-cli (commit 0459809) e as fontes do W3C em 9 de outubro de 2026.