Manipulação de Imagens com Python: Redimensionamento Inteligente

POR CÓDIGO DA HORA • 12 MARÇO 2026

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.LANCZOS garante 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=True e quality=85 reduzem drasticamente o peso do arquivo sem perda visual perceptível.
  • Tratamento de Erros: O bloco try/except evita que o programa "quebre" caso o arquivo não exista ou esteja corrompido.