Conversão de Imagens WebP para JPG com Python

Este artigo explora o formato de imagem WebP, suas vantagens e desvantagens, e demonstra como converter arquivos WebP para o formato JPG utilizando um script Python.

O que é o formato WebP?

O WebP é um formato de imagem desenvolvido pelo Gooogle com o objetivo de acelerar o carregamento de páginas web. Ele oferece compressão superior em comparação com formatos mais antigos como JPEG e PNG, resultando em arquivos menores e economia de banda. Em condições de mesma qualidade visual, imagens WebP podem ser até 40% menores que seus equivalentes em JPEG.

No entanto, o WebP utiliza compressão com perdas (lossy compression), o que significa que, embora reduza o tamanho do arquivo, pode haver uma perda sutil de qualidade. O processo de codificação de um arquivo WebP também exige mais recursos computacionais e leva mais tempo do que a codificação de um arquivo JPEG.

Como visualizar e converter arquivos WebP?

Devido à sua eficiência, o WebP tem sido amplamente adotado por websites. A maioria dos navegadores modernos, como Google Chrome, Microsoft Edge e Opera, suporta a visualização direta de arquivos WebP. Simplesmente arrastar e soltar um arquivo WebP em uma janela do navegador geralmente é suficiente para abri-lo.

Para situações em que é necessário editar a imagem em softwares como o Adobe Photoshop ou quando a compatibilidade com outros aplicativos é crucial, a conversão para formatos mais comuns como JPG ou PNG torna-se necessária. Uma maneira eficiente de realizar essa conversão em lote é através de um script Python.

Script Python para conversão

Para executar este script, você precisará ter o Python instalado e a biblioteca Pillow. A biblioteca Pillow é essencial para manipulação de imagens em Python, incluindo a leitura e escrita de diversos formatos, como WebP e JPG.

Instalação da biblioteca Pillow

Se você ainda não possui a biblioteca Pillow, instale-a usando o pip:

pip install Pillow

Código do Script

O script a seguir percorre todos os arquivos em um diretório, identifica aqueles com a extensão '.webp', e os converte para o formato JPG. Ele lida especificamente com imagens WebP que possuem canal alfa (transparência) para garantir que a conversão para JPG, que não suporta transparência nativamente, seja feita corretamante, mesclando a imagem sobre um fundo branco.

import os
from PIL import Image

# Define o diretório de trabalho atual
diretorio_atual = os.getcwd()

# Obtém a lista de todos os arquivos no diretório
arquivos_no_diretorio = os.listdir(diretorio_atual)

print("Iniciando conversão de WebP para JPG...")

# Itera sobre cada arquivo encontrado
for nome_arquivo in arquivos_no_diretorio:
    # Verifica se o arquivo termina com a extensão .webp
    if nome_arquivo.lower().endswith('.webp'):
        try:
            # Abre a imagem WebP
            imagem = Image.open(os.path.join(diretorio_atual, nome_arquivo))

            # Cria o nome do arquivo de saída, substituindo a extensão
            nome_arquivo_saida = os.path.splitext(nome_arquivo)[0] + '.jpg'
            caminho_arquivo_saida = os.path.join(diretorio_atual, nome_arquivo_saida)

            # Verifica se o arquivo JPG de destino já existe
            if not os.path.exists(caminho_arquivo_saida):
                # Se a imagem tiver canal alfa (transparência), mescla com fundo branco
                if imagem.mode == "RGBA":
                    imagem.load() # Necessário para manipulação de canais
                    fundo_branco = Image.new("RGB", imagem.size, (255, 255, 255))
                    # O canal alfa (índice 3) é usado como máscara
                    fundo_branco.paste(imagem, mask=imagem.split()[3])
                    imagem_final = fundo_branco
                else:
                    # Se não houver transparência, converte diretamente para RGB
                    imagem_final = imagem.convert("RGB")

                # Salva a imagem no formato JPEG
                imagem_final.save(caminho_arquivo_saida, 'JPEG')
                print(f"Convertido: '{nome_arquivo}' para '{nome_arquivo_saida}'")
            else:
                print(f"Arquivo de destino '{nome_arquivo_saida}' já existe. Pulando '{nome_arquivo}'.")

        except Exception as e:
            print(f"Erro ao processar '{nome_arquivo}': {e}")

print("Conversão concluída.")

Este script garante que a conversão seja realizada de forma segura, tratando imagens com transparência e evitando a sobrescrita de arquivos existentes.

Tags: Python WebP jpg Pillow conversao de imagem

Publicado em 10-22 21:17