 
13/03/2024

Este artigo é um guia prático para programadores que desejam otimizar as imagens de seus sites convertendo arquivos JPG para o formato WEBP usando PHP. A conversão para WEBP pode resultar em imagens de alta qualidade com tamanhos de arquivo significativamente menores, melhorando o desempenho do site. Abordaremos como automatizar esse processo em lote, facilitando a otimização de múltiplas imagens de uma só vez.
Para facilitar o processo de conversão de imagens em seu projeto, fornecemos um script PHP completo e pronto para uso. Este código automatiza a conversão de arquivos JPG em WEBP dentro de uma pasta específica, verificando também se a conversão já foi realizada anteriormente para evitar processamentos desnecessários. Copie o script a seguir e integre-o ao seu projeto para começar a otimizar suas imagens imediatamente.
<?php
// Define o diretório de origem das imagens
$directory = './images/';
// Função para converter uma imagem JPG em WEBP
function convertJPGToWEBP($filePath, $quality = 75) {
    // Gera o nome do arquivo de saída substituindo a extensão .jpg por .webp
    $outputFile = preg_replace('/\.jpg$/i', '.webp', $filePath);
    
    // Verifica se o arquivo WEBP já existe para evitar reprocessamento
    if (file_exists($outputFile)) {
        echo "O arquivo WEBP já existe, conversão não necessária: " . $outputFile . "\n";
        return;
    }
    // Cria uma nova instância do Imagick para o arquivo especificado
    $image = new Imagick($filePath);
    
    // Define a qualidade de compactação
    $image->setImageCompressionQuality($quality);
    
    // Define o formato da imagem para WEBP
    $image->setImageFormat('webp');
    
    // Salva a imagem convertida no disco
    $image->writeImage($outputFile);
    
    // Limpa a instância do Imagick para liberar recursos
    $image->clear();
    
    echo "Convertido com sucesso: " . $filePath . " para " . $outputFile . "\n";
}
// Lê todos os arquivos JPG no diretório especificado
$files = glob($directory . '*.jpg');
foreach ($files as $file) {
    // Chama a função de conversão para cada arquivo, se necessário
    try {
        convertJPGToWEBP($file);
    } catch (Exception $e) {
        echo "Erro ao converter o arquivo: $file. Erro: " . $e->getMessage() . "\n";
    }
}
?>
Para garantir que o processo de conversão de imagens seja compreendido em detalhes, vamos dividir o script em partes menores e explicar cada uma delas. Isso ajudará a entender como o script funciona e como ele pode ser ajustado para atender às necessidades específicas do seu projeto.
O primeiro passo é definir o diretório onde estão localizadas as imagens que serão convertidas. Utilizamos a variável $directory para armazenar o caminho até essa pasta. É importante que o caminho esteja correto e que o script tenha permissão de leitura e escrita no diretório especificado.
$directory = './images/';A função convertJPGToWEBP é o coração do script. Ela recebe como parâmetros o caminho do arquivo JPG a ser convertido e a qualidade desejada para o arquivo WEBP resultante. Dentro dessa função, realizamos a conversão propriamente dita e salvamos o novo arquivo no mesmo diretório do original.
function convertJPGToWEBP($filePath, $quality = 75) {
    $outputFile = preg_replace('/\.jpg$/i', '.webp', $filePath);
    if (file_exists($outputFile)) {
        echo "O arquivo WEBP já existe, conversão não necessária: " . $outputFile . "\n";
        return;
    }
    $image = new Imagick($filePath);
    $image->setImageCompressionQuality($quality);
    $image->setImageFormat('webp');
    $image->writeImage($outputFile);
    $image->clear();
}Para processar todas as imagens JPG no diretório de origem, utilizamos a função glob para encontrar todos os arquivos que correspondam ao padrão especificado. Em seguida, iteramos sobre cada arquivo encontrado e chamamos a função convertJPGToWEBP para realizar a conversão.
$files = glob($directory . '*.jpg');
foreach ($files as $file) {
    try {
        convertJPGToWEBP($file);
    } catch (Exception $e) {
        echo "Erro ao converter o arquivo: $file. Erro: " . $e->getMessage() . "\n";
    }
}php nome-do-script.php no terminal. Isso permite um controle melhor e reduz o risco de sobrecarregar o servidor de produção com processamentos intensivos de CPU, especialmente ao lidar com um grande número de imagens.Com esse script, você pode facilmente converter todas as suas imagens JPG para o formato WEBP, melhorando o desempenho do seu site ao reduzir o tamanho dos arquivos de imagem sem sacrificar a qualidade visual.