### 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...

Comentamos sobre o quebra-cabeças "Torre de Hanoi" cuja solução com computação é comummente usada com recursão:
