Manipulação de Imagens com Python: Redimensionamento Inteligente
Processamento de Imagens com Pillow
Redimensionar fotos é uma tarefa comum, mas fazer isso mantendo a qualidade e tratando erros de arquivo é o que separa um script simples de uma ferramenta profissional.
Procedimento de Instalação
Para este tutorial, utilizaremos a biblioteca Pillow. Instale-a via terminal/prompt de comando:
pip install Pillow
O Código Completo
Este script utiliza o método thumbnail, que reduz a imagem mantendo a proporção original, evitando que a foto fique "esticada".
from PIL import Image
import os
def otimizar_imagem(caminho_entrada, caminho_saida, largura_max=800, altura_max=800):
try:
# Abre a imagem original
with Image.open(caminho_entrada) as img:
print(f"Original: {img.size[0]}x{img.size[1]}px")
# Redimensiona mantendo o aspect ratio
img.thumbnail((largura_max, altura_max), Image.Resampling.LANCZOS)
# Salva com otimização e ajuste de qualidade
img.save(caminho_saida, optimize=True, quality=85)
tamanho_final = os.path.getsize(caminho_saida) / 1024
print(f"Sucesso! Imagem salva em: {caminho_saida}")
print(f"Tamanho final: {tamanho_final:.2f} KB")
except FileNotFoundError:
print("Erro: O arquivo de imagem não foi encontrado.")
except Exception as e:
print(f"Ocorreu um erro inesperado: {e}")
# Execução
if __name__ == "__main__":
otimizar_imagem('foto.jpg', 'foto_otimizada.jpg')
Melhorias Aplicadas
- Filtro LANCZOS: O uso de
Image.Resampling.LANCZOSgarante a melhor nitidez possível ao reduzir pixels. - Gerenciamento de Contexto (with): Garante que o arquivo seja fechado corretamente após o processamento, evitando travamentos de memória.
- Otimização de Saída: Os parâmetros
optimize=Trueequality=85reduzem drasticamente o peso do arquivo sem perda visual perceptível. - Tratamento de Erros: O bloco
try/exceptevita que o programa "quebre" caso o arquivo não exista ou esteja corrompido.