# Sesc - Programação para Ilustradores
## Edição de imagens com Programação
## `hackmd.io/@villares/prog-ilustra-e1`
Ferramentas e referências:
- [Thonny + py5](https://abav.lugaralgum.com/como-instalar-py5/)
- [Material extra](https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/)
- [dicionários (referência do py5)](https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/sumario-referencia-py5.html)
Assuntos do curso:
- Apresentação [SLIDES](https://drive.google.com/file/d/1fsqDbZqK3Ee173a3ZiyZpxAJrkL77ZEp/view?usp=sharing)
- Sobre programação pra artistas e as ferramentas que vamos usar
- Objetivos
- "Carregando" (lendo) uma imagem
- Dimensões e escala das imagens
- Filtros básicos com `apply_filter()`
- THRESHOLD
- POSTERIZE
- ...
- Salvando/Exportando
Se der tempo hoje:
- Lendo uma pasta inteira de imagens
Para as outras aulas:
- recortes e máscaras
- "colagens gerativas" (baseado no curso de Quadrinhos com Programação)
- manipulando os pixels com NumPy
- Produzindo "Glitch"
- Experimentando Retículas (aproveitando os resultados do outro curso)
- Pillow/PIL e py5
### Imagem
Baixei uma imagem do Wikimedia Commons: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Mexican_Wolf_2_yfb-edit_1.jpg/640px-Mexican_Wolf_2_yfb-edit_1.jpg
- Renomeei para um nome mais simples `lobo.jpg` e crie um arquivo Python no Thonny `lobo.py` (o nome tanto faz) ambos precisam estar na mesma pasta para este código funcionar.
- Imagem `webp` não funcionou
- `png`, `tif` e outros formatos devem funcionar!
### Filtros
![image](https://hackmd.io/_uploads/S188RoHg0.png)
```python=
def setup():
size(800, 800) # tamanho da área de desenho
img = load_image('lobo.jpg') # carregando imagem
print(img.width, img.height)
image(img, 0, 0,
img.width * 2,
img.height * 2)
apply_filter(POSTERIZE, 2)
```
#### Threshold dinâmico
![peek_1](https://hackmd.io/_uploads/HJnihlIgC.gif)
```python!
def setup():
global img
size(800, 800) # tamanho da área de desenho
img = load_image('lobo.jpg') # carregando imagem
print(img.width, img.height)
def draw():
n = mouse_x / 800
image(img, 0, 0,
img.width * 2,
img.height * 2)
apply_filter(THRESHOLD, n)
```
### Salvando com "s"
```python!
def setup():
global img
size(800, 800) # tamanho da área de desenho
img = load_image('lobo.jpg') # carregando imagem
print(img.width, img.height)
def draw():
global nivel
nivel = 2 + int(mouse_y / 200)
image(img, 0, 0,
img.width * 2,
img.height * 2)
apply_filter(POSTERIZE, nivel)
def key_pressed():
if key == 's':
nome_arquivo = f'saida{nivel}.png'
save(nome_arquivo)
print(nome_arquivo)
```
### Offscreen buffer (área gráfica de apoio)
![lobo0.56625](https://hackmd.io/_uploads/r1on_hHxR.png)
```python!
def setup():
global img, apoio
size(800, 800) # tamanho da área de desenho
img = load_image('lobo.jpg') # carregando imagem
print(img.width, img.height)
# cria uma tela de desenho de apoio fora da vista (offscreen)
apoio = create_graphics(img.width * 2, img.height * 2) # maior
def draw():
global nivel
nivel = mouse_y / 800
apoio.begin_draw() # começa a desenhar no offscreen buffer
apoio.image(img, 0, 0,
img.width * 2,
img.height * 2)
apoio.apply_filter(THRESHOLD, nivel) # filtro limite/limiar
apoio.tint(255, 0, 0) # tingimento (vermelho)
apoio.image(apoio, 0, 0) # reaplica a imagem nela mesmo (com tingimento)
apoio.end_draw() # encerra o desenho no offscreen buffer
image(apoio, 0, 0) # mostra a area de apoio na janela principal
def key_pressed():
if key == 's': # == é comparação, = atribuição
nome_arquivo = f'lobo{nivel}.png' # f-string
apoio.save(nome_arquivo)
print(nome_arquivo)
```
---
Exemplo Extra:
![image](https://hackmd.io/_uploads/BJQRzhCeC.png)
```python!
# Foto do Lobo: Carlos Delgado
# https://commons.wikimedia.org/wiki/File:Canis_lupus_signatus_-_01.jpg
def setup():
global img, out
size(640 * 2, 384 * 2)
img = load_image('lupus.jpg')
n = 8
for i in range(n):
out = create_graphics(width, height)
out.begin_draw()
iw, ow = img.width // n, out.width // n
out.copy(img, i * iw, 0, iw, img.height, i * ow, 0, ow, out.height)
out.apply_filter(py5.POSTERIZE, 2 + i)
out.end_draw()
image(out, 0, 0)
def key_pressed():
save(f'out.jpg')
```