Introdução
WebP é um formato moderno para arquivos de imagem, gratuito e de código aberto, desenvolvido pelo Google parar suportar compressão com e sem perda de qualidade, com o objetivo de otimizar a exibição de imagens em sites na internet.
As imagens são responsáveis pela maior parte dos dados transferidos na maioria dos sites, o que torna o tamanho dos arquivos de imagens um fator crucial para uma navegação rápida e fluída, especialmente em dispositivos móveis.
Imagens no formato WebP são significativamente menores em tamanho do que as no formato JPG, mesmo em níveis similares de compressão com perda, mantendo a mesma qualidade visual. Além disso, diferentemente do JPG, o WebP suporta transparência (canal alpha), uma característica que antes era exclusiva de formatos como o PNG, mas com a vantagem de gerar arquivos consideravelmente menores.
Essa combinação de menor tamanho de arquivo e maior flexibilidade torna o WebP uma excelente escolha para melhorar o desempenho e a qualidade de sites na internet.
Instalando o cwebp no Linux
O comando cwebp será utilizado para a conversão de imagens. Para instalá-lo, execute o comando apropriado conforme a sua distribuição:
# bash
No Ubuntu/Debian: sudo apt install webp No Fedora: sudo dnf install webp No Arch Linux: sudo pacman -S webp No Slackware: sudo slackpkg install libwebp
Convertendo imagens para WebP
O comando cwebp suporta a conversão de imagens a partir dos formatos PNG, JPEG, TIFF e WebP. Vale ressaltar que arquivos PNG e WebP animados não são suportados.
Convertendo uma imagem JPG para WebP:
# bash
cwebp -q 80 nome-da-imagem.jpg -o nome-da-imagem.webp
Convertendo uma imagem PNG para WebP:
# bash
cwebp -q 80 nome-da-imagem.png -o nome-da-imagem.webp
Nos exemplos anteriores:
- -q 80 Define a qualidade da imagem final em WebP, com valores de 0 a 100.
- -o Especifica o nome do arquivo WebP que será gerado após a conversão.
Exemplo prático
Neste exemplo, vamos converter duas imagens: uma em formato JPG chamada ilustracao-01.jpg e outra em formato PNG chamada ilustracao-02.png, para o formato WebP. Listando os arquivos originais:
# bash
ls -lh
total 716K
-rw-r--r-- 1 rudi users 381K Feb 6 09:53 ilustracao-01.jpg
-rw-r--r-- 1 rudi users 329K Feb 6 10:00 ilustracao-02.png
Utilizaremos uma qualidade de 60%, o que proporcionará uma excelente compressão, sem que a diferença visual seja perceptível para muitas imagens.
Convertendo a imagem ilustracao-01.jpg para WebP:
# bash
cwebp -q 60 ilustracao-01.jpg -o ilustracao-01.webp
Saving file 'ilustracao-01.webp'
File: ilustracao-01.jpg
Dimension: 1400 x 800
Output: 136206 bytes Y-U-V-All-PSNR 37.51 36.24 36.67 37.13 dB
(0.97 bpp)
block count: intra4: 3897 (88.57%)
intra16: 503 (11.43%)
skipped: 1 (0.02%)
bytes used: header: 313 (0.2%)
mode-partition: 17761 (13.0%)
Residuals bytes |segment 1|segment 2|segment 3|segment 4| total
macroblocks: | 8%| 30%| 41%| 21%| 4400
quantizer: | 45 | 38 | 32 | 21 |
filter level: | 14 | 8 | 41 | 38 |
Verificando o tamanho do arquivo após a conversão:
# bash
ls -lh ilustracao-01.*
-rw-r--r-- 1 rudi users 381K Feb 6 09:53 ilustracao-01.jpg
-rw-r--r-- 1 rudi users 134K Feb 6 10:28 ilustracao-01.webp
A compressão atingiu aproximadamente 65%, mantendo a qualidade visual da imagem, como pode ser observado na comparação entre as imagens.
O processo de conversão para imagens PNG segue o mesmo princípio. Vamos agora converter a imagem ilustracao-02.png para o formato WebP:
# bash
cwebp -q 60 ilustracao-02.png -o ilustracao-02.webp
Saving file 'ilustracao-02.webp'
File: ilustracao-02.png
Dimension: 500 x 500
Output: 19842 bytes Y-U-V-All-PSNR 39.00 39.90 39.83 39.27 dB
(0.63 bpp)
block count: intra4: 730 (71.29%)
intra16: 294 (28.71%)
skipped: 8 (0.78%)
bytes used: header: 157 (0.8%)
mode-partition: 3267 (16.5%)
Residuals bytes |segment 1|segment 2|segment 3|segment 4| total
macroblocks: | 4%| 22%| 30%| 44%| 1024
quantizer: | 45 | 41 | 34 | 26 |
filter level: | 14 | 9 | 21 | 28 |
Verificando o tamanho do arquivo após a conversão:
# bash
ls -lh ilustracao-02.*
-rw-r--r-- 1 rudi users 329K Feb 6 10:00 ilustracao-02.png
-rw-r--r-- 1 rudi users 20K Feb 6 10:56 ilustracao-02.webp
A compressão atingiu incríveis 94%, mantendo uma excelente qualidade visual. Lembre-se, a porcentagem de compressão varia de acordo com a composição da imagem. Imagens com menos cores, como desenhos ou gráficos, tendem a ser mais comprimidas sem perder muita qualidade.
Suporte
O formato WebP é suportado nativamente pelos navegadores Google Chrome, Safari, Firefox, Edge e Opera. Além disso, muitas ferramentas e bibliotecas, incluindo softwares de edição de imagem, já oferecem suporte ao WebP. No entanto, ainda podem existir algumas limitações em certas plataformas ou aplicativos.
O pacote webp também inclui uma ferramenta para decodificação e visualização de imagens WebP usando OpenGL. Para visualizar uma imagem WebP a partir do terminal, use o seguinte comando:
# bash
vwebp ilustracao-01.webp
Convertendo múltiplas imagens
Converter uma única imagem usando a linha de comando, como vimos nos exemplos anteriores, é relativamente simples. No entanto, quando se trata de centenas de imagens, o processo pode ser mais demorado. Para otimizar isso, você pode criar um script que converte várias imagens de uma vez.
Script para conversão em massa:
# bash
for file in *.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp"; done
Execute o comando acima dentro da pasta onde as imagens a serem convertidas estão localizadas. Este script converterá todas as imagens com extensões JPG, JPEG e PNG para WebP, mantendo o nome original dos arquivos e apenas alterando a extensão para .webp. Os arquivos originais serão preservados.
Explicação do comando:
- for file in *.{jpg,jpeg,png}:
- Itera sobre todos os arquivos no diretório atual com as extensões .jpg, .jpeg e .png.
- cwebp -q 60 "$file":
- Converte a imagem atual $file para WebP com qualidade 60 (ajuste o valor -q conforme necessário).
- -o "${file%.*}.webp":
- Define o nome do arquivo de saída. ${file%.*} remove a extensão do arquivo original (por exemplo, foto.jpg vira foto), e .webp é adicionado ao final.
- done
- Finaliza o loop.
Convertendo imagens de um diretório específico
Se você quiser converter imagens de um diretório específico, basta substituir pasta pelo caminho do diretório desejado:
# bash
for file in pasta/*.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp"; done
Excluindo as imagens originais após a conversão
Caso queira excluir as imagens originais após a conversão, adicione && rm "$file" ao comando:
# bash
for file in *.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp" && rm "$file"; done
Isso removerá cada arquivo original após a conversão bem-sucedida.
Conclusão
O formato WebP se destaca como uma solução moderna e eficiente para a otimização de imagens na web, combinando alta qualidade visual com tamanhos de arquivo significativamente menores. Como vimos neste artigo, a conversão de imagens para WebP pode ser feita de forma rápida e prática usando ferramentas de linha de comando, como o cwebp, disponível na maioria das distribuições Linux.
Além da conversão de imagens, o comando oferece uma ampla gama de opções avançadas. Você pode alterar o modo de compressão, adicionar transparência em imagens com fundo, redimensionar e recortar imagens. Para explorar todas as possibilidades, consulte o manual completo executando o comando man cwebp no terminal.
Comandos simples e scripts automatizados permitem que você converta grandes quantidades de imagens de formatos como JPG, PNG e TIFF para WebP, melhorando o desempenho de sites e aplicações, especialmente em dispositivos móveis e conexões mais lentas.
Se você ainda não experimentou o WebP, agora é o momento ideal para começar. Aproveite as técnicas apresentadas aqui e veja como a adoção desse formato pode trazer benefícios reais para seus projetos.
Referências
Para elaboração deste artigo uma das fontes foi o manual (man page) disponível no Slackware Linux.