A maioria dos formulários de envio comunica todas as falhas com a mesma frase. Essa mensagem única esconde pelo menos quatro verificações diferentes, e a solução é outra em cada uma delas.
Verificação um: o limite em bytes
É o limite mais frequente e o único em que as pessoas costumam pensar. Mede-se em bytes, e não em megapíxeis, por isso uma imagem de aspeto modesto saída de um telemóvel recente falha-o com toda a facilidade.
Resolve-se comprimindo para um número abaixo do limite indicado — e não exatamente igual a ele. Há sistemas que medem o pedido codificado em vez do ficheiro, e um envio codificado em base64 pelo caminho fica cerca de um terço maior do que o ficheiro em disco. Apontar a uns pontos percentuais abaixo do limite quase não te custa nada e arruma a questão de vez.
Verificação dois: o limite de dimensões
É independente do tamanho do ficheiro e muitas vezes não vem documentado. Um formulário pode exigir uma fotografia com 1200 píxeis de largura no máximo, por muito pequeno que o ficheiro seja. Comprimir com mais força nunca o vai satisfazer — tens mesmo de redimensionar. Se o formulário indica um tamanho de apresentação, normalmente impõe também um máximo próximo desse valor.
Verificação três: o tipo MIME
Os servidores cuidadosos não confiam na extensão do ficheiro: leem os primeiros bytes e identificam
o formato pela assinatura. Muda o nome de um PNG para .jpg e um servidor rigoroso continua a ver
um PNG, porque é isso que os bytes dizem.
É por isso que converter resolve e mudar o nome não resolve. E é também por isso que um ficheiro exportado de uma aplicação de design como «JPEG» pode falhar: há exportadores que escrevem uma variante que a biblioteca do servidor recusa.
Verificação quatro: espaço de cor e variante de codificação
É mais rara, mas existe. Os JPEG em CMYK, os PNG de 16 bits e os JPEG progressivos são todos ficheiros válidos que algumas bibliotecas de servidor mais antigas rejeitam à partida.
Recodificar resolve os casos ao seu alcance. O ToolZool descodifica para píxeis simples de 8 bits e escreve JPEG baseline por predefinição, por isso um PNG de 16 bits volta com 8 bits e um JPEG progressivo volta em baseline — que são precisamente as variantes que um servidor exigente tem mais probabilidade de aceitar. O JPEG em CMYK é o caso incómodo: é um ficheiro de fluxo de trabalho de impressão, e não da web, e a solução fiável é voltar a exportá-lo em RGB a partir do programa que o produziu.
Como distinguir umas das outras
Experimenta uma imagem de teste propositadamente minúscula: uns quilobytes, umas centenas de píxeis, JPEG baseline simples. Se essa passar, o problema está no teu ficheiro e já sabes que eixo mudar — começa pelo compressor e, se o limite for apertado, ficar abaixo de 50 KB explica a ordem por que convém mexer nas coisas. Se a imagem de teste também falhar, o problema é do formulário, da sessão ou do navegador, e nenhuma recodificação vai ajudar.

