Guia Definitivo do Python Pillow | Explicação Completa do Básico ao Avançado

1. Introdução

Visão geral do Python e Pillow

Python é uma linguagem de programação amplamente utilizada por desenvolvedores e cientistas de dados devido à sua sintaxe simples e ao extenso suporte de bibliotecas. Entre elas, o Pillow (anteriormente PIL: Python Imaging Library) é uma biblioteca popular de processamento de imagens em Python.

O Pillow oferece suporte a vários formatos de imagem, como JPEG, PNG e GIF, e permite uma ampla gama de manipulações, incluindo redimensionamento, recorte, filtragem, adição de texto e muito mais. É comumente usado em aplicações e projetos que requerem carregamento, salvamento e edição de imagens.

Propósito deste Artigo

Este artigo fornece um guia abrangente sobre o uso da biblioteca Pillow do Python para processamento de imagens, desde operações básicas até técnicas avançadas. Especificamente, ele cobre tarefas fundamentais como carregar e salvar imagens, redimensionar, girar, filtrar, desenhar texto e composição de imagens.

Ao ler este material, você obterá uma compreensão aprofundada de como usar o Pillow e adquirirá o conhecimento e as habilidades necessárias para aplicá‑lo em projetos reais.

Ad

2. Como instalar o Pillow

2.1 Instalando o Pillow no seu ambiente Python

Para usar o Pillow, você precisa instalar a biblioteca no seu ambiente Python primeiro. O processo de instalação é simples — basta digitar o comando a seguir no seu terminal (ou Prompt de Comando no Windows).

pip install Pillow

O comando pip é uma ferramenta para gerenciar pacotes Python. Executar este comando instalará automaticamente a biblioteca Pillow, permitindo que você realize tarefas de processamento de imagens.

2.2 Como verificar a instalação

Depois de instalar o Pillow, você deve executar um script simples para verificar se ele está funcionando corretamente. Escreva e execute o código a seguir em um arquivo de script Python:

from PIL import Image

# Test code for verifying Pillow installation
img = Image.new('RGB', (100, 100), color = 'red')
img.save('test_image.png')

Este código cria uma imagem vermelha de 100 × 100 pixels e a salva como “test_image.png”. Se o arquivo de imagem for criado corretamente, o Pillow foi instalado e está funcionando adequadamente.

2.3 Problemas comuns de instalação e soluções

Eventualmente, você pode encontrar problemas ao instalar o Pillow. Abaixo estão alguns problemas frequentes e suas soluções:

  1. Usando uma versão desatualizada do Python O Pillow suporta Python 3.x e posteriores. Se você estiver usando uma versão mais antiga do Python, a instalação pode falhar. Use python --version para verificar sua versão do Python e atualize-a, se necessário.
  2. Problemas de dependência Durante a instalação, você pode encontrar dependências ausentes. Nesses casos, siga a mensagem de erro para instalar os pacotes faltantes individualmente, ou use o comando a seguir para instalar as dependências automaticamente:
    pip install Pillow --upgrade
    
  1. Variáveis de ambiente incorretas No Windows, o Pillow pode não funcionar corretamente se o caminho do Python ou do Pip não estiver configurado adequadamente nas variáveis de ambiente. Verifique se o caminho correto está configurado.

Ad
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Carregando e exibindo imagens

3.1 Como carregar um arquivo de imagem em Python

Carregar uma imagem é um dos passos fundamentais no processamento de imagens com Pillow. Você pode usar o método Image.open() para abrir um arquivo de imagem.

Aqui está um exemplo de trecho de código para carregar uma imagem:

from PIL import Image

# Load an image file
img = Image.open('sample.jpg')

# Display image information
print(img.format)  # File format (e.g., JPEG, PNG)
print(img.size)    # Size (width, height)
print(img.mode)    # Color mode (e.g., RGB, L)

Este código usa Image.open() para abrir um arquivo de imagem e obter seu formato, tamanho e modo de cor. Basta especificar o caminho do arquivo para carregar a imagem.

3.2 Exibindo uma imagem

Depois de carregar uma imagem, você pode exibi‑la usando o método show(). Esse método abre a imagem no visualizador padrão do sistema.

Confira o código a seguir para exibir uma imagem:

from PIL import Image

# Load an image file
img = Image.open('sample.jpg')

# Display the image
img.show()

Este código exibe a imagem especificada usando o visualizador de imagens padrão do sistema, permitindo que você confirme visualmente seu conteúdo antes de prosseguir com o processamento adicional.

3.3 Recuperando Informações Detalhadas da Imagem

O Pillow permite que você extraia vários detalhes sobre uma imagem, como sua largura, altura e formato de arquivo.

Aqui está como recuperar os detalhes da imagem:

from PIL import Image

# Load an image file
img = Image.open('sample.jpg')

# Display image details
print(f'Image Size: {img.size}')   # (Width, Height)
print(f'File Format: {img.format}') # Image format (JPEG, PNG, etc.)
print(f'Color Mode: {img.mode}')    # Color mode (RGB, L, etc.)

Isso ajuda a coletar informações essenciais sobre uma imagem, o que pode ser útil para redimensionamento, corte e outras manipulações.

3.4 Formatos de Imagem Suportados no Pillow

O Pillow suporta uma variedade de formatos de imagem, incluindo:

  • JPEG
  • PNG
  • GIF
  • BMP
  • TIFF

Esse amplo suporte a formatos torna o Pillow uma escolha flexível para lidar com imagens em aplicativos web, processamento de dados e mais.

Ad

4. Processamento Básico de Imagens

4.1 Redimensionando uma Imagem

O redimensionamento é uma tarefa comum de processamento de imagem usada para ajustar a resolução para uso em web e aplicativos. Com o Pillow, você pode redimensionar imagens facilmente usando o método resize().

Aqui está um exemplo:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Resize the image (Width: 400px, Height: 300px)
resized_img = img.resize((400, 300))

# Save the resized image
resized_img.save('resized_sample.jpg')

Este código redimensiona uma imagem para (400, 300) pixels e a salva como um novo arquivo.

4.2 Cortando uma Imagem

O corte é útil para extrair uma porção específica de uma imagem. O método crop() no Pillow permite que você especifique a área a ser extraída.

Aqui está um exemplo:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Crop the image (from top-left (100, 100) to bottom-right (300, 300))
cropped_img = img.crop((100, 100, 300, 300))

# Save the cropped image
cropped_img.save('cropped_sample.jpg')

Este código extrai uma porção da imagem e a salva separadamente.

4.3 Rotacionando uma Imagem

Rotacionar uma imagem é simples com o método rotate() do Pillow. Você pode especificar o ângulo de rotação e, se necessário, usar expand=True para evitar o corte da imagem.

Aqui está um exemplo que rotaciona uma imagem em 45 graus:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Rotate the image by 45 degrees (expanding to fit the entire image)
rotated_img = img.rotate(45, expand=True)

# Save the rotated image
rotated_img.save('rotated_sample.jpg')

Este código rotaciona a imagem em 45 graus, garantindo que toda a imagem permaneça visível usando expand=True.

4.4 Inverter uma Imagem

Inverter uma imagem horizontalmente ou verticalmente pode ser feito facilmente usando o método transpose() no Pillow.

Aqui está um exemplo de inverter uma imagem horizontalmente:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Flip the image horizontally
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)

# Save the flipped image
flipped_img.save('flipped_sample.jpg')

Este código inverte a imagem horizontalmente, criando uma imagem espelhada.

4.5 Outras Funcionalidades Básicas de Processamento de Imagem no Pillow

Além de redimensionamento, corte, rotação e inversão, o Pillow suporta várias outras operações de processamento de imagem, como ajuste de brilho, contraste e modos de cor. Essas funcionalidades permitem uma edição de imagem mais flexível e automatizada.

Ad

5. Convertendo e Salvando Formatos de Imagem

5.1 Convertendo Formatos de Imagem

O Pillow facilita a conversão de formatos de imagem. Por exemplo, você pode converter uma imagem JPEG para o formato PNG com apenas algumas linhas de código.

Aqui está como:

from PIL import Image

# Load a JPEG image
img = Image.open('sample.jpg')

# Save it as a PNG file
img.save('converted_image.png', 'PNG')

Este código carrega um arquivo JPEG e o salva como PNG.

5.2 Como Salvar Imagens

Ao salvar imagens com Pillow, você pode especificar várias opções, como qualidade, otimização e configurações de JPEG progressivo.

Por exemplo, salvando uma imagem JPEG com configurações otimizadas:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Save as JPEG with quality and optimization settings
img.save('optimized_image.jpg', 'JPEG', quality=95, optimize=True)

O parâmetro quality (0-100) ajusta a qualidade da imagem, enquanto optimize=True reduz o tamanho do arquivo.

5.3 Salvando JPEGs Progressivos

JPEGs progressivos permitem que as imagens sejam carregadas em etapas, melhorando a experiência do usuário em redes lentas.

Aqui está como salvar uma imagem como JPEG progressivo:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Save as a progressive JPEG
img.save('progressive_image.jpg', 'JPEG', quality=85, progressive=True)

Isso garante que a imagem apareça gradualmente quando carregada em uma página web.

5.4 Preservando Dados EXIF

Os dados EXIF (Exchangeable Image File Format) contêm metadados como configurações da câmera e informações de GPS. O Pillow permite que você retenha os dados EXIF ao salvar imagens.

Aqui está um exemplo:

from PIL import Image

# Load an image
img = Image.open('sample.jpg')

# Retrieve EXIF data
exif_data = img.info.get('exif')

# Save the image with EXIF data
img.save('exif_image.jpg', 'JPEG', exif=exif_data)

Isso mantém os dados EXIF originais intactos.

Ad

6. Aplicando Filtros e Efeitos

6.1 Ajustando Brilho e Contraste

O Pillow fornece o módulo ImageEnhance para ajustar brilho e contraste.

Aqui está como ajustar o brilho:

from PIL import Image, ImageEnhance

# Load an image
img = Image.open('sample.jpg')

# Increase brightness by 1.5 times
enhancer = ImageEnhance.Brightness(img)
bright_img = enhancer.enhance(1.5)

# Save the modified image
bright_img.save('bright_sample.jpg')

Para ajustar o contraste:

from PIL import Image, ImageEnhance

# Load an image
img = Image.open('sample.jpg')

# Increase contrast by 2.0 times
enhancer = ImageEnhance.Contrast(img)
contrast_img = enhancer.enhance(2.0)

# Save the modified image
contrast_img.save('contrast_sample.jpg')

6.2 Aplicando Filtros de Desfoque e Nitidez

Você pode usar ImageFilter para aplicar vários filtros.

Para desfocar uma imagem:

from PIL import Image, ImageFilter

# Load an image
img = Image.open('sample.jpg')

# Apply blur filter
blurred_img = img.filter(ImageFilter.BLUR)

# Save the blurred image
blurred_img.save('blurred_sample.jpg')

Para tornar uma imagem mais nítida:

# Apply sharpen filter
sharpened_img = img.filter(ImageFilter.SHARPEN)

# Save the sharpened image
sharpened_img.save('sharpened_sample.jpg')

6.3 Usando Filtros de Detecção de Bordas

Você pode usar filtros de detecção de bordas para análise de imagens.

Aqui está um exemplo:

from PIL import Image, ImageFilter

# Load an image
img = Image.open('sample.jpg')

# Apply edge detection filter
edge_img = img.filter(ImageFilter.FIND_EDGES)

# Save the modified image
edge_img.save('edge_sample.jpg')
Ad

7. Desenhando Texto e Formas

7.1 Desenhando Texto em uma Imagem

Você pode adicionar texto usando o módulo ImageDraw.

Desenho de texto básico:

from PIL import Image, ImageDraw, ImageFont

# Load an image
img = Image.open('sample.jpg')

# Create a drawing object
draw = ImageDraw.Draw(img)

# Draw text
draw.text((10, 10), 'Hello, Pillow!', fill=(255, 255, 255))

# Save the image
img.save('text_sample.jpg')

7.2 Desenhando Formas

O Pillow também suporta o desenho de linhas, retângulos e círculos.

Exemplo:

from PIL import Image, ImageDraw

# Load an image
img = Image.open('sample.jpg')

# Create a drawing object
draw = ImageDraw.Draw(img)

# Draw a line
draw.line((0, 0, 100, 100), fill=(255, 0, 0), width=5)

# Draw a rectangle
draw.rectangle((50, 50, 150, 150), outline=(0, 255, 0), width=3)

# Draw a circle
draw.ellipse((200, 200, 300, 300), outline=(0, 0, 255), width=3)

# Save the image
img.save('shape_sample.jpg')
Ad

8. Conclusão

Este guia abordou técnicas fundamentais e avançadas de processamento de imagens usando Pillow, incluindo carregamento de imagens, redimensionamento, recorte, filtragem e desenho de texto. Com esse conhecimento, você pode implementar várias tarefas de manipulação de imagens de forma eficiente.

Pillow continua sendo uma ferramenta poderosa para desenvolvimento web, ciência de dados e automação. Continue explorando seus recursos para aplicações mais avançadas!

Ad