Como funciona

O que acontece com seu arquivo e como escolher os ajustes

Cada decodificação, redimensionamento e codificação acontece no seu dispositivo. Isto é o que cada etapa faz, o que cada ajuste muda e onde a ferramenta para.

1. Seu navegador lê o arquivo

A área de soltar entrega o arquivo à File API e depois a um Web Worker deste dispositivo. Não há nenhuma etapa de envio.

2. Um codec trabalha nos pixels

Módulos WebAssembly construídos a partir do MozJPEG, do codec PNG do Squoosh, do oxipng, do libwebp e do libavif decodificam e codificam a imagem fora da thread principal, e ports Rust fazem o redimensionamento, então a página continua utilizável. Cada módulo traz sua própria licença, e a página de créditos lista todas.

3. Você baixa o resultado

Cada arquivo concluído ganha seu próprio link de download, seu tamanho antes e depois e uma prévia do que você vai receber.

A ferramenta Compress Images com uma imagem já convertida: a área de soltar, os controles de formato de saída, qualidade, redimensionamento, EXIF e tamanho-alvo, e uma linha concluída com o tamanho antes e depois, as dimensões da saída, um botão de download e as duas imagens lado a lado.
Uma conversão real: uma imagem de teste convertida para WebP na qualidade padrão. Os números na linha são os que essa conversão produziu, e não uma promessa sobre o seu arquivo.

Onde o trabalho acontece

Seu arquivo nunca chega a um servidor, e o resultado também não. A página lê o arquivo com a File API, que dá ao navegador uma referência para bytes que já estão no seu disco; ela não os envia. Esses bytes vão para um Web Worker, uma thread em segundo plano, para que um lote longo não trave a página que você está lendo. Dentro desse worker os codecs transformam sua imagem em pixels simples de 8 bits, redimensionam se você pediu isso e codificam o resultado no formato escolhido.

Os codecs são módulos WebAssembly construídos a partir do MozJPEG, do codec PNG do Squoosh, do oxipng, do libwebp e do libavif, mais ports em Rust para a etapa de redimensionamento. A página de créditos lista cada um com sua própria licença, porque a licença de um pacote que embrulha não é a licença do codec. Um módulo é baixado deste site na primeira vez que você usa o formato dele, e por isso a primeira conversão em um formato é mais lenta do que as seguintes. Nada é baixado de outro lugar, e nenhuma requisição leva seu arquivo.

Como escolher um ajuste de qualidade

A qualidade é um número inteiro de 1 a 100 e começa em 75. Ela vale para JPEG, WebP e AVIF, que são todos com perdas: um número menor gasta menos bits na imagem, um maior gasta mais. PNG é sem perdas, então ignora o ajuste por completo, e a ferramenta avisa isso enquanto o PNG estiver selecionado.

Nenhuma das pontas da escala é de graça. Em 1 a imagem mantém sua forma mas perde detalhe, e para onde esse detalhe vai primeiro depende da imagem e do codificador, então esta página não promete uma ordem. Em 100 o arquivo é grande e ainda não é bem o original, porque o codificador reconstrói a imagem a partir de uma descrição comprimida dela. Se você não sabe por onde começar, deixe em 75 e compare as duas prévias que cada linha concluída mostra: a da esquerda é o arquivo que você escolheu, a da direita é o que você vai baixar.

Como escolher um tamanho

O redimensionamento fica desligado até você ligá-lo. Por largura, a saída tem tantos pixels de largura e mantém as proporções da imagem, então uma foto 3:2 com largura 1280 sai 1280 por 853. Por percentual, as duas dimensões passam a ser essa parte do original. O campo de percentual para em 100, então o modo percentual não consegue ampliar uma imagem; uma largura que você colocar acima da original amplia, o que raramente deixa um arquivo menor e é por isso que o campo de percentual é o mais seguro dos dois.

Se sua câmera guardou uma rotação no arquivo, essa rotação é aplicada aos pixels antes de qualquer outra coisa acontecer, então uma foto tirada na vertical sai na orientação certa. As quatro orientações que incluem um quarto de volta, EXIF 5 a 8, trocam a largura e a altura, então uma foto marcada como 6 sai 400 por 600 de um arquivo cujos números dizem 600 por 400. As outras quatro deixam os dois números como estavam: nenhuma mudança, as duas de espelhamento, e a virada de 180 graus, que vira a imagem de lado sem deixá-la mais alta nem mais larga.

Um formato de entrada não traz essa rotação para a ferramenta de jeito nenhum: o bloco EXIF de uma entrada AVIF não é lido, então um arquivo AVIF que guarda uma orientação é usado como está guardado, com as dimensões que o arquivo declara.

Bater um limite de tamanho

Formulários e servidores costumam querer um arquivo abaixo de um certo número de quilobytes, e não apenas menor. O campo de tamanho-alvo aceita esse número em KiB, que é 1024 bytes e não 1000, e a ferramenta trabalha em direção a ele: se a primeira codificação passa do número, ela baixa a qualidade, até 1, até o arquivo caber, e se a primeira codificação sai bem abaixo dele, ela sobe a qualidade a partir do seu ajuste, nunca acima de 100, atrás da maior qualidade que ainda couber. A linha então diz se o arquivo que você recebe está no alvo ou abaixo dele.

Três limites honestos. A busca só consegue gastar qualidade, e só a metade para cima dela é limitada pelo seu ajuste, então uma imagem que ainda estiver acima do alvo na qualidade 1 não vai alcançá-lo, e o que você recebe nesse caso é a codificação na qualidade 1. No outro sentido, um alvo acima do que a qualidade 100 consegue alcançar para aquela imagem não pode ser preenchido deixando o arquivo maior, porque a escala para em 100: você recebe o maior arquivo que o formato fez, que ainda está abaixo do seu número, e a linha informa o alvo como alcançado, porque o arquivo está abaixo do teto. E PNG ignora o ajuste de qualidade, então a busca não tem nada para gastar ali: uma saída PNG ainda recebe uma segunda passada pelo oxipng, que pode devolver menos bytes que a primeira codificação, de modo que um alvo de PNG que a primeira codificação não alcançou ainda pode ser cumprido, e um que nenhuma das duas passadas alcança é informado como não alcançado.

Um alvo é um teto com um piso em 95% dele, e não um tamanho a mirar. A qualidade anda em números inteiros, e um passo pode atravessar a faixa inteira, então a busca mira a faixa e cai dentro dela quando um passo cai dentro, devolvendo a codificação mais próxima abaixo do seu alvo quando nenhum passo cai. Ela não promete um tamanho exato nem um arquivo dentro de 5% do seu número, e o número que ela informa é se o arquivo que está prestes a te entregar está no seu alvo ou abaixo dele.

É essa última frase que decide o veredito. Os bytes são contados depois de qualquer bloco EXIF ter sido escrito, então se você pedir para manter os metadados e o bloco empurrar o arquivo acima do seu alvo, a linha diz que o alvo não foi alcançado, mesmo que a codificação sozinha estivesse abaixo dele. Você nunca será informado de que um limite foi cumprido quando o arquivo que você baixa está acima dele.

Quando um arquivo é recusado

Os dois limites são conferidos em momentos diferentes, e a diferença vale saber. Um arquivo maior que 32 MiB é recusado só pelo tamanho, antes de os bytes dele serem lidos, então ele não custa nada. Um arquivo acima de 40.000.000 de pixels precisa ser lido por inteiro antes, porque a contagem de pixels dele só é conhecida depois que o cabeçalho foi lido, então uma imagem grande demais é lida e depois recusada antes de qualquer coisa decodificar seus pixels.

A linha nomeia o limite que recusou, seja de um jeito seja de outro. Um arquivo recusado nunca para o lote: todos os outros arquivos que você escolheu terminam. Nenhum dos dois limites depende da máquina que você está usando. São números fixos, e não uma leitura de memória, então um computador mais rápido ou menor não os aumenta. O que os muda é a entrada: corte a imagem, reduza em outro lugar, ou divida o trabalho, e depois escolha os arquivos de novo (escolher substitui a lista).

Uma entrada que a ferramenta não consegue decodificar de jeito nenhum, porque está danificada ou truncada, ganha uma linha que diz isso no mesmo lugar. Um arquivo criptografado não pode ser aberto aqui: não há campo de senha, e nenhuma parte do seu arquivo é enviada a lugar nenhum para ser desbloqueada.

Uma falha é sobre o navegador e não sobre a imagem. Se o worker que converte um arquivo não puder ser iniciado, ou morrer no meio do caminho, aquele arquivo ganha uma linha dizendo que o navegador não conseguiu rodar o mecanismo de imagens, e aquele worker não pega mais arquivos. Os outros workers seguem com o resto da fila, e as linhas que já tinham terminado mantêm seus resultados. Se todos os workers falharem, então todos os arquivos que ainda não tinham começado ganham essa mesma linha em vez de esperar: a conversão termina com uma resposta para cada um em vez de ficar parada nos arquivos que nenhum worker alcançou. Um arquivo que apenas falha ao decodificar ou codificar não é esse caso: esse é o erro de uma linha, e o worker que o informou segue para o próximo arquivo. Tente uma versão atual do Chrome, Firefox, Edge ou Safari.

Primeiros passos

Continue explorando este tema

Temas relacionados: Tarefas comuns

Pronto para experimentar com suas próprias imagens?

A ferramenta está na página inicial. Solte alguns arquivos e compare os tamanhos lado a lado.

Comprimir uma imagem