# 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') ```