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 memória de forma proporcional ao tamanho do arquivo;

Ampliações degradam a imagem, que possui um limite de dimensão (tela ou impressão) determinado pelo tamanho da matriz armazenada.

Os arquivos ficam grandes;

Bom para representações naturais / foto realísticas, e construções que demandem controle pixel a pixel;

 

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 construçõ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 foto realí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, wft, pfb);

Ilustração;

Animação digital;

USOS COMUNS

Mais velharias de onde estas vieram:

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

LISP

Postscript

PDF (no geral, LaTeX)

Flash (Actionscript)

PROGRAMAÇÃO COM IMAGENS VETORIAS

SVG

NA WEB  ATUALMENTE

BITMAP

VETOR

Que raios é isso?

Socorro!

Isso é realmente
necessário?

Saudades, SQN!

Aqui começamos a
conversar

ADOBE

W3C

X

<CANVAS>
<SVG>

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 o Illustrator, Indesign, Figma, e outros editores 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 (arquivo) é um 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

100 100 translate
/grid {0.5 0.3 0 0 setcmykcolor 
gsave
2 setlinewidth 400 0 moveto 0 0 lineto 0 500 lineto stroke
grestore
gsave
0.3 setlinewidth
5 { 30 100 moveto 400 100 lineto stroke 0 100 translate } repeat
grestore
gsave
0.3 setlinewidth
4 { 100 20 moveto 100 500 lineto stroke 100 0 translate } repeat
grestore
gsave
/tekst 3 string def /Helvetica findfont 10 scalefont setfont
100 100 500 { /y exch def 5 y 2 sub moveto y tekst cvs show } for
90 100 400 { /x exch def x 5 moveto x 10 add tekst cvs show } for
grestore 
0 setgray } bind def
grid

%Example 17

/triangle {100 0 rlineto -50 50 rlineto -50 -50 rlineto} def

%First triangle
gsave
100 100 translate
0 20 200 {
/x exch def
0 x 180 div 0 setrgbcolor
0 x moveto
triangle
fill
}for
grestore

%Second triangle
gsave
200 100 translate
0 30 300 {
/x exch def
0 0 x 270 div setrgbcolor
0 x moveto
triangle
fill
}for
grestore

showpage

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!

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

<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 realmente acaba 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 contra-mão do SVG;

Como o SVG é, em si, um código, a sobreposição sistemático 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 Porcessing é, sem dúvida, infinitamente melhor);

Se você for usar Processing, precisará pensar nos termos (lógica) de como o SVG é construído.

PROCESSING + SVG

BIBLIOTECAS E FRAMEWORKS

REFERÊNCIAS BIBLIOGRÁFICAS

Programando Imagens Vetoriais

By Guilherme Ranoya

Programando Imagens Vetoriais

Como programar imagens vetoriais com SVG

  • 1,019