PROGRAMAÇÃO COM IMAGENS VETORIAIS

GUILHERME RANOYA

GUILHERME RANOYA

O QUE SÃO IMAGENS VETORIAIS?

CONSTRUÇÕES GRÁFICAS GERADAS POR FÓRMULAS MATEMÁTICAS OU ALGORITMOS, E NÃO POR UMA MATRIZ BIDIMENSIONAL DE CORES (BITMAP)

BITMAP

VETOR

#FFFFFF

#000000

#868686

X = 3.5
Y = 7.5
A = 1.045
M = 5.3

NEM SEMPRE FOI ASSIM...
AQUI NÃO TEM NEM VETOR, NEM BITMAP.
MAS ESSA É OUTRA HISTÓRIA...

AQUI SIM:
UM VIDEOGAME BASEADO
EM GRÁFICOS VETORIAIS

BITMAP

VETOR

PRECISA DE POUCO PROCESSAMENTO SE NÃO HOUVER COMPACTAÇÃO DOS DADOS, MAS CONSOMEM MEMORIA DE FORMA PROPORCIONAL AO TAMANHO DO ARQUIVO

OS ARQUIVOS FICAM GRANDES

BOM PARA REPRESENTAÇÕES NATURAIS / FOTOREALÍSTICAS E CONSTRUÇÕES QUE DEMANDEM CONTROLE PIXEL A PIXEL

AMPLIAÇÕES DEGRADAM A IMAGEM, QUE POSSUI UM LIMITE DE DIMENSÃO (TELA OU IMPRESSÃO) DETERMINADO PELO TAMANHO DA MATRIZ ARMAZENADA

DEMANDA PROCESSAMENTO COMPUTACIONAL, MAS POUCA MEMÓRIA

SÃO ESCALONÁVEIS (PODEM SER AMPLIADOS SEM LIMITES E SEM DEGRADAÇÃO)

OS ARQUIVOS FICAM PEQUENOS

BOM PARA REPRESENTAÇÕES ARTIFICIALMENTE OBTIDAS, OU CONTRUÇÕES FORTEMENTE MATEMÁTICAS / GEOMÉTRICAS

MANIPULAÇÃO DOS ELEMENTOS GRÁFICOS CONSTRUÍDOS (OBJETOS/POLÍGONOS/VETORES), E NÃO DA IMAGEM PONTO-A-PONTO

BITMAP

VETOR

TRATAMENTO E REPRODUÇÃO DE IMAGENS FOTOGRÁFICAS

RENDERIZAÇÕES FOTOREALÍSTICAS

ARTE COMPUTACIONAL (CONSTRUÇÕES ARTIFICIAIS) PARA REPRODUÇÃO LIMITADA À TELA

PROCESSAMENTO DE VÍDEO E ANIMAÇÃO QUADRO-A-QUADRO

MATERIAL PARA IMPRESSÃO

REPRESENTAÇÃO DE ARQUITETURA E DOCUMENTOS TÉCNICOS (PLANTAS, FACHADAS, CORTES, SECÇÕES, ESQUEMAS CONSTRUTIVOS, ETC.)

PROJETOS EDITORIAIS (REVISTAS, LIVROS, ETC.)

DOCUMENTOS PARA IMPRESSÃO (PDF, POSTSCRIPT)

FONTES E TIPOGRAFIA (TTF, OTF, PFB)

ILUSTRAÇÃO

ANIMAÇÃO DIGITAL

USOS COMUNS

MAIS VELHARIAS DE ONDE VIERAM ESTAS:

AS FERRAMENTAS DE PRODUÇÃO DIGITAL DE DESIGN

OS ANOS 80 E 90

AS FERRAMENTAS DE PRODUÇÃO DIGITAL DE DESIGN

OS ANOS 80 E 90

VOCÊS JÁ PERCEBERAM QUE VELHARIA É O QUE NÃO FALTA, NÉ?

LISP

POSTSCRIPT

PDF (NO GERAL, LATEX)

FLASH (ACTIONSCRIPT)

PROGRAMAÇÃO COM IMAGENS VETORIAS

SVG

NA WEB  ATUALMENTE

BITMAP
<CANVAS>

VETOR
<SVG>

QUE RAIOS É ISSO?

SOCORRO!

ISSO É REALMENTE NECESSÁRIO?

SAUDADES, SQN!

AQUI COMEÇAMOS A CONVERSAR

ADOBE

W3C

X

SVG

O SVG É UM FORMATO DE IMAGEM VETORIAL BASEADO EM XML, QUE POR SUA VEZ É BASEADO NO HTML

É UM SISTEMA DE MARCAÇÃO (TAGS) PARA AS INSTRUÇÕES QUE COMPÕEM UMA IMAGEM VETORIAL

PROGRAMAS COMO ILLUSTRATOR, INDESIGN, FIGMA, E OUTROS EDIORES VETORIAIS, GRAVAM SEUS ARQUIVOS COMO SVG

PARA OS NAVEGADORES WEB PODEMOS CARREGAR ARQUIVOS SVG COMO UMA IMAGEM, ASSIM COMO PODEMOS INSERIR O CÓDIGO SVG DIRETAMENTE NO HTML



COMO NO HTML, AS PROPRIEDADES DOS ELEMENTOS DO SVG PODEM SER DEFINIDAS ATRAVÉS DE CSS, OU MANIPULADAS POR JAVASCRIPT

<img src="" />
<svg></svg>

SVG

SVG (ARQUIVO) É UM ARQUIVO DE TEXTO COM UM CÓDIGO
COMO ESSE ABAIXO:

<svg viewBox="0 0 500 500" style='width: 500px; height: 500px; border: 1px solid black;'>

    <rect x=0 y=0 width=500 height=500 fill="#FF0000" />
    <line x1=10 y1=10 x2=250 y2=300 stroke="#FFFFFF" stroke-width=10 />

</svg>

...FÁCIL DE LER, NÃO?
BEM MELHOR QUE POSTSCRIPT...

SVG != POSTSCRIPT

A GRANDE PERDA AQUI É QUE O SVG NÃO É UMA LINGUAGEM DE PROGRAMAÇÃO FORMAL, MAS APENAS UM SCRIPT / LINGUAGEM DE MARCAÇÃO, SEM USO DE VARIÁVEIS, LOOPS, CONDICIONAIS, ETC.

SVG + JAVASCRIPT

O LADO BOM É QUE, NA WEB, PODEMOS USAR JAVASCRIPT PARA PROGRAMAR O SVG.

...É ISSO, POR ACASO, É LADO BOM..?

PROCESSING + SVG

O PROCESSING (ORIGINAL/JAVA) PODE EXPORTAR ARQUIVOS SVG

import processing.svg.*;

void setup() {
  size(400, 400, SVG, "filename.svg");
}

void draw() {
  // Draw something good here
  line(0, 0, width/2, height);

  // Exit the program
  println("Finished.");
  exit();
}

O PROCESSING (ORIGINAL/JAVA) PODE EXPORTAR ARQUIVOS SVG

...MUITO CUIDADO COM ISSO
DEPENDENDO DO QUE VOCÊ CONSTRUIR COM DRAW(), SEU ARQUIVO SVG PODE FICAR GIGANTE E REDUNDANTE...

PROCESSING + SVG

<svg viewBox="0 0 500 500" style='width: 500px; height: 500px; border: 1px solid black;'>

    <rect x=0 y=0 width=500 height=500>
    <line x1=10 y1=10 x2=250 y2=300>
    
    <rect x=0 y=0 width=500 height=500>
    <line x1=11 y1=10 x2=251 y2=300>
    
    <rect x=0 y=0 width=500 height=500>
    <line x1=12 y1=10 x2=252 y2=300>
    
    <rect x=0 y=0 width=500 height=500>
    <line x1=13 y1=10 x2=253 y2=300>

</svg>
for (x=10; x<14; x++) {
   background(0);
   line(x,0,x+250,300);
}
background(0);
background(0);
background(0);
background(0);
<svg viewBox="0 0 500 500" style='width: 500px; height: 500px; border: 1px solid black;'>

    <rect x=0 y=0 width=500 height=500>
    <line x1=13 y1=10 x2=253 y2=300>

</svg>

REDUNDANTE E DESNECESSÁRIO

ISSO É O QUE É EFETIVAMENTE VISTO

PROCESSING + SVG

APESAR DE POSSÍVEL, A LÓGICA/MECANISMO DO PROCESSING OPERA COM A PERMANENTE SOBREPOSIÇÃO DA MATRIZ GRÁFICA, QUE FUNCIONA BEM PARA IMAGENS BITMAP, MAS É O OPOSTO DA LÓGICA VETORIAL, ONDE OS ELEMENTOS SÃO DE FATO OBJETOS QUE NÃO PRECISAM SER REDESENHADOS FRAME-A-FRAME

A LÓGICA DO PROCESSING VAI NA CONTRAMÃO DO SVG

COMO O SVG É EM SI UM CÓDIGO, A SOBREPOSIÇÃO SISTEMÁTICA SÓ IRIA INCHAR O ARQUIVO/ELEMENTO COM MAIS CÓDIGO REDUNDANTE

O JAVASCRIPT PURO (VANILLA) TEM FERRAMENTAS MUITO RUDIMENTARES PARA LIDAR COM PROCESSOS GRÁFICOS (O PROCESSING É, SEM DÚVIDA, INFINITAMENTE MELHOR)

SE VOCÊ FOR USAR PROCESSING, PRECISARÁ PENSAR NOS TERMOS (LÓGICA) DE COMO O SVG É CONSTRUÍDO

EXEMPLOS EM FUNCIONAMENTO

GERADOR DE CAPAS/GRAFISMOS PARA OS LIVROS
FRONTEIRAS DO DESIGN

EXPERIMENTO DE LOGOTIPO GENERATIVO PARA
O LABORATÓRIO VISSE

COMPONENTE TIMELINER

GERADOR DE CAPAS/GRAFISMOS PARA OS LIVROS
FRONTEIRAS DO DESIGN

EXPERIMENTO DE LOGOTIPO GENERATIVO PARA
O LABORATÓRIO VISSE

COMPONENTE TIMELINER

ARC SLICE

ARC SLICE

LOGOTIPO GENERATIVO PARA O
LABORATÓRIO VISSE

LOGOTIPO GENERATIVO PARA O
LABORATÓRIO VISSE

BIBLIOTECAS E FRAMEWORKS

REFERÊNCIAS BIBLIOGRÁFICAS

Programando Imagens Vetoriais

By Guilherme Ranoya

Programando Imagens Vetoriais

Como programar imagens vetoriais com SVG

  • 1,002