### Espaço de Tecnologias e Artes - Sesc Avenida Paulista ## Grupo de estudos em Python ### `hackmd.io/@sesc-av-paulista/estudos-em-python-9-setembro` ### Manipulando imagens em lotes #### Pillow Tutorial https://pillow.readthedocs.io/en/stable/handbook/tutorial.html ```python from PIL import Image im = Image.open('pudim.jpg') c = im.crop((30, 30, 130, 130)) c.show() im.show() c.show() c.save('cropped.jpg') ``` Arredondamento no Python https://docs.python.org/3/library/functions.html#round ### Processando redimensionamento ```python from pathlib import Path from PIL import Image caminho_entrada = Path('imagens') caminho_saida = Path('imagens_redimensionadas') def processa_imagens(pasta): for caminho in pasta.iterdir(): if caminho.is_file() and caminho.suffix == '.jpg': redimensionar(caminho, 100, caminho_saida) elif caminho.is_dir(): processa_imagens(caminho) def redimensionar(caminho, nova_altura, caminho_saida): nome = caminho.name caminho_nova_imagem = caminho_saida / nome im = Image.open(caminho) tp = im.width / im.height nw = round(nova_altura / tp) r = im.resize((nh, nw)) r.save(caminho_nova_imagem) processa_imagens(caminho_entrada) ``` Outra versão separando pegar as imagens de processar ```python= from pathlib import Path from PIL import Image caminho_entrada = Path('imagens') caminho_saida = Path('imagens_redimensionadas') def pega_imagens(pasta): resultado = [] for caminho in pasta.iterdir(): if caminho.is_file() and caminho.suffix == '.jpg': resultado.append(caminho) elif caminho.is_dir(): parcial = pega_imagens(caminho) resultado.extend(parcial) return resultado def redimensionar(caminho, nova_altura, caminho_saida): nome = caminho.name caminho_nova_imagem = caminho_saida / nome im = Image.open(caminho) taxa_proporcao = im.width / im.height nova_largura = round(nova_altura / taxa_proporcao) r = im.resize((nova_altura, nova_largura)) r.save(caminho_nova_imagem) for imagem in pega_imagens(caminho_entrada): redimensionar(imagem, 200, caminho_saida) # list(map(redimensionar, pega_imagens(caminho_entrada))) ``` #### Plugins do pillow ``` from PIL import Image from pillow_heif import register_heif_opener register_heif_opener() ``` ### Conversas paralelas Comentei sobre o quadrinho xkcd.com que discute quanto tempo vale investir em automatizar uma tarefa... ![is_it_worth_the_time](https://hackmd.io/_uploads/SyAN6g09xe.png) Comentamos sobre o quebra-cabeças "Torre de Hanoi" cuja solução com computação é comummente usada com recursão: ![image](https://hackmd.io/_uploads/r1BzPWCqgx.png)