Atividade 8: Inverta sua imagem

Recursos do Minicurso

Nesta seção, vamos aprender como inverter sua imagem usando pixels.

Exemplo – Inverter sua imagem de cabeça para baixo

Vamos virar o gato de cabeça para baixo.

Virar a imagem de cabeça para baixo é o mesmo que criar uma imagem simétrica em relação à linha central horizontal, que é a linha preta na imagem abaixo.

# Precisamos importar o pacote PIL para manipular pixels
from PIL import Image

# Abrir a imagem do gato
img = Image.open("cat.png")
width = img.size[0]
height = img.size[1]

# Criar nova imagem com mesma largura e altura
newimg = Image.new('RGB', (width,height))

# Definir os pixels da nova imagem
for i in range(width): # Para cada coluna
    for j in range(height): # Para cada linha
        heightNew = height - 1 - j # Nova posição vertical do pixel
        color = img.getpixel( (i, heightNew) ) # Cor da imagem original
        newimg.putpixel((i,j),color) # Aplicar na nova imagem

newimg.save("Mycat.png")

Uau! Aqui está nosso novo gato depois de virar de cabeça para baixo.

Como descobrimos como definir heightNew?

heightNew = height - 1 - j

Esse é o segredo para inverter o gato. Pegamos a altura da imagem e subtraímos 1 (porque a contagem começa do zero) e o valor atual da linha (j). Isso nos dá o local espelhado.

Você pode desenhar em papel para visualizar isso melhor.

Nosso código principal é:

width = img.size[0]
height = img.size[1]

newimg = Image.new('RGB', (width,height))

for i in range(width):
    for j in range(height):
        heightNew = height - 1 - j
        color = img.getpixel((i, heightNew))
        newimg.putpixel((i,j), color)

Por exemplo, tente aplicar esse código no seguinte grupo de letras 4x4:

Depois crie a versão espelhada usando a linha horizontal como base e compare com o resultado anterior. Ficaram iguais?

Desafio – Inverta seu gato da esquerda para a direita

Agora é sua vez de inverter o gato da esquerda para a direita!

Virar a imagem da esquerda para a direita é o mesmo que criar uma imagem simétrica com relação à linha central vertical.

Preste atenção à variável widthNew e pense com calma sobre como defini-la.

Abrir no Replit