
A edição de imagens é uma tarefa comum em diversos campos, desde o design gráfico até a análise de dados. Com o avanço da programação, é possível automatizar muitos desses processos utilizando Python. Neste tutorial, vamos explorar como realizar edição automatizada de imagens com Python, utilizando a biblioteca Pillow e outras ferramentas poderosas.
Introdução à Biblioteca Pillow
Pillow é uma biblioteca de manipulação de imagens para Python que adiciona suporte para abrir, manipular e salvar muitos formatos de arquivo diferentes. É uma extensão do PIL (Python Imaging Library) e é considerada a biblioteca de imagens padrão para Python.
Instalação do Pillow
Para começar a trabalhar com Pillow, primeiro precisamos instalá-la. Abra o terminal e execute o seguinte comando:
pip install Pillow
Métodos Básicos do Pillow
Vamos explorar alguns métodos básicos fornecidos pelo Pillow para edição de imagens.
Abrindo e Salvando Imagens
Para abrir uma imagem, utilizamos o método open
e para salvar, o método save
.
from PIL import Image
# Abrindo uma imagem
imagem = Image.open('caminho/para/sua/imagem.jpg')
# Salvando a imagem editada
imagem.save('caminho/para/imagem/editada.jpg')
Redimensionando Imagens
Para redimensionar imagens, usamos o método resize
.
nova_dimensao = (800, 600)
imagem_redimensionada = imagem.resize(nova_dimensao)
Girando e Transpondo Imagens
Podemos girar imagens com o método rotate
e transpor com transpose
.
# Girando a imagem em 90 graus
imagem_girada = imagem.rotate(90)
# Transpondo a imagem
imagem_transposta = imagem.transpose(Image.FLIP_LEFT_RIGHT)
Trabalhando com Cores
Pillow permite converter imagens para escala de cinza ou aplicar filtros de cores.
# Convertendo para escala de cinza
imagem_cinza = imagem.convert('L')
Criando Thumbnails
Pillow pode criar thumbnails de imagens, o que é útil para visualizações rápidas.
tamanho_thumbnail = (100, 100)
imagem.thumbnail(tamanho_thumbnail)
Projetos de Edição de Imagens com Pillow
Agora que conhecemos os métodos básicos, vamos aplicá-los em alguns projetos práticos.
Projeto 1: Comprimindo Imagens
Podemos reduzir o tamanho das imagens alterando suas dimensões e qualidade de salvamento.
from PIL import Image
def comprimir_imagem(caminho_imagem, fator_reducao, qualidade):
imagem = Image.open(caminho_imagem)
largura, altura = imagem.size
nova_largura = int(largura * fator_reducao)
nova_altura = int(altura * fator_reducao)
imagem_reduzida = imagem.resize((nova_largura, nova_altura))
imagem_reduzida.save('imagem_comprimida.jpg', quality=qualidade)
comprimir_imagem('caminho/para/imagem.jpg', 0.5, 85)
Projeto 2: Convertendo Imagens para Preto e Branco
Para converter uma série de imagens para preto e branco, podemos iterar sobre elas e aplicar a conversão.
import os
from PIL import Image
pasta_imagens = 'caminho/para/pasta/com/imagens'
imagens = [arquivo for arquivo in os.listdir(pasta_imagens) if arquivo.endswith('.jpg')]
for imagem in imagens:
img = Image.open(os.path.join(pasta_imagens, imagem))
img_cinza = img.convert('L')
img_cinza.save(os.path.join(pasta_imagens, 'preto_branco', imagem))
Projeto 3: Adicionando Marca d’Água
Podemos adicionar uma marca d’água em uma imagem posicionando outra imagem sobre ela.
from PIL import Image
def adicionar_marca_dagua(imagem_fundo, imagem_marca_dagua, posicao):
fundo = Image.open(imagem_fundo)
marca_dagua = Image.open(imagem_marca_dagua)
fundo.paste(marca_dagua, posicao, marca_dagua)
fundo.save('imagem_com_marca_dagua.jpg')
adicionar_marca_dagua('imagem.jpg', 'marca_dagua.png', (50, 50))
Conclusão
A edição automatizada de imagens com Python é uma habilidade valiosa que pode economizar tempo e recursos. Com a biblioteca Pillow, temos acesso a uma ampla gama de ferramentas para manipular imagens de maneira eficiente. Experimente os métodos e projetos apresentados e explore ainda mais o que o Pillow pode oferecer!

Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários
30xpfrom PIL import Image, ImageDraw, ImageFont
# Caminho do arquivo com as logos
logos_file = "1_20250910_160319_0000.png"
# Abrir a imagem com as logos
logos_img = Image.open(logos_file).convert("RGBA")
# Cortes manuais das logos (x1, y1, x2, y2) -> baseado na imagem enviada
impacto_crop = logos_img.crop((0, 0, 512, 512))
gama_crop = logos_img.crop((512, 0, 1430, 512))
mobili_crop = logos_img.crop((1430, 0, 1890, 512))
logos = [impacto_crop, gama_crop, mobili_crop]
# Banner
preview_width = 1500
preview_height = 200
banner = Image.new("RGB", (preview_width, preview_height), "white")
draw = ImageDraw.Draw(banner)
section_width = preview_width // 3
logo_padding = 10
# Fonte
try:
font_small = ImageFont.truetype("arial.ttf", 18)
except IOError:
font_small = ImageFont.load_default()
# Textos
texts = [
"Artes Marciais - Adulto e Infantil | 61 98139-9907 | @impactomuaythai",
"Crosstraining - Adulto/Kids e TAF | 61 99172-9103 | @Gama_cf",
"Pilates, Fisioterapia e Quiropraxia | 61 98439-3606 | @mobilipilates"
]
# Inserir cada logo na sua seção
for i, logo in enumerate(logos):
# Redimensionar mantendo proporção para caber dentro da seção
max_w = section_width - 2 * logo_padding
max_h = preview_height - 60
logo.thumbnail((max_w, max_h), Image.Resampling.LANCZOS)
# Calcular posição central
x = i * section_width + (section_width - logo.width) // 2
y = (preview_height - logo.height) // 2 - 10 # sobe um pouco para abrir espaço p/ texto
# Colar a logo
banner.paste(logo, (x, y), logo)
# Adicionar texto embaixo
bbox = draw.textbbox((0, 0), texts[i], font=font_small)
text_w = bbox[2] - bbox[0]
text_h = bbox[3] - bbox[1]
tx = i * section_width + (section_width - text_w) // 2
ty = preview_height - text_h - 5
draw.text((tx, ty), texts[i], fill="black", font=font_small)
# Salvar e mostrar
banner.save("banner_final.png")
banner.show()
Olá Vitor tudo bem? Não entendi a sua dúvida? Seria algo a respeito do seu código?