SVG
SVG = Scalable Vector Graphics
Odkazy
[editovat]- w:Scalable Vector Graphics
- www.w3.org/Graphics/SVG/
- w3schools.com/graphics/svg_intro – SVG Tutorial
- SVGeneral
Podstránky
[editovat]- /example – příklady
Předmluva
[editovat]Na Internetu lze nalézt množství relevantních odkazů, tutoriálů a kurzů na téma SVG. Zde se pokusíme udělat si pokud možno kompaktní přehled o problematice SVG.
Bylo dobré na tomto místě zdůraznit, že vektorová grafika SVG je standardem skupiny W3C a měla by být tudíž preferovaným vektorovým formátem na webu. SVG obrázky se zobrazují bez jakýchkoliv pluginů! V současné době to platí pro všechny významnější www prohlížeče Mozilla Firefox, Google Chrome, Internet Explorer (od verze 9 výše), Opera i Safari.
Úvod
[editovat]SVG je vektorový grafický formát (viz: Vektorová grafika), zapsaný v XML souboru. DOM (Document Object Model) lze ovládat i programově, takže např. "obrázky" jsou pak interaktivní, je možné vytvářet animace atd.
Základní kostra takového XML dokumentu (vytvoření pracovní plochy) může vypadat například následovně:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="300" height="200"
viewBox="0 0 300 200"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- ZDE BUDE KÓD PRO VYKRESLENÍ VŠECH DALŠÍCH OBJEKTǓ -->
</svg>
V tomto případě základní plocha 300x200 vytváří jakýsi rastr, ve kterém můžeme adresovat jednotlivé body pomocí souřadnic x y:
- souřadnice x je horizontální a běží zleva doprava od 0 do width=300.
- souřadnice y je vertikální a běží odshora dolů od 0 do height=200.
viewBox udává jakési okénko, které pak "je vidět"; v tomto případě se posazení okénka 0 0 i jeho velikost 300 200 kryje s celou kreslící plochou.
Objekty
[editovat]- <path> cesty jsou základním objektem pro tvorbu obrázků.
- Basic shapes: základní geometrické tvary:
- úsečka (line)
- obdélník (rectangle)
- kružnice (circle)
- elipsa (ellipse)
- lomená čára (polyline)
- mnohoúhelník (polygon)
- Texty
Path
[editovat]<path d="data" <!-- definition, vlastní popis_cesty -->
class="třída" <!-- např. selektor pro styl -->
style="styl"
id="identifikace" <!-- např. programově řízená animace, změna pomocí DOM atd. -->
transform="lineární_transformace" <!-- aplikuje se na všechny vrcholy -->
/>
Cesta je tvořena ze segmentů, popsaných pomocí příkazů v attributu d:
- úsečka
- Bézierova křivka:
- kvadratická
- kubická
- eliptický oblouk
Příkazy jsou jednopísmennými zkratkami. Záleží na velikosti písmen:
- velké písmeno: absolutní pohyb
- malé písmeno: relativní pohyb (vzhledem k předchozímsouřadnicím grafického kursoru)
Argumenty v tabulce jsou pro názornost uvedeny jakožto regulární výrazy, tj. znaménko + znamená, že předcházející výraz (případně uzavřený do závorek) se může vyskytovat jednou či vícekrát. (Tj. závorky se tam ve skutečnosti nepíšou!) Ve skutečnosti se mohou vynechat i všechny mezery tam, kde tím nevznikne nejednoznačnost (např.. mezi písmeny a čísly anebo je-li číslo vybaveno znaménkem). A naopak namísto mezer se doporučuje argumenty pro přehlednost oddělovat čárkami, např. x,y.
mnemo | abs. | rel. | arg | význam |
---|---|---|---|---|
Lineto | L | l | (x y)+ | úsečka na souřadnice x y; příp. další souřadnice pokračují v kreslení lomené čáry |
Moveto | M | m | (x y)+ | pohyb na souřadnice bez kreslení; případné další souřadnice už jsou ale už jakoby lineto |
Horizontal | H | h | x+ | horizontální úsečka |
Vertical | V | v | y+ | vertikální úsečka |
(konec abecedy) | Z | z | uzavření cesty úsečkovým segmentem |
mnemo | abs. | rel. | args | |
---|---|---|---|---|
Quadratic | Q | q | (x1 y1 x y)+ | kvadratická = trojice řídících bodů: 1. bod je dán z minula, uveden je 2. a 3. bod |
quadraTic | T | t | (x y)+ | kvadratická; uveden je jen koncový bod, řídící je dopočítán tak, aby cesta plynule navazovala |
Cubic | C | c | (x1 y1 x2 y2 x y)+ | kubická = čtveřice řídících bodů: 1. bod je dán z minula, uveden je 2., 3. a 4. bod |
S-tvar | S | s | (x2 y2 x y)+ | kubická; uveden jen 3. a 4. bod (1. a 2. hladce navazuje) |
Navazovat by měly jen kvadratické nebo kubické mezi sebou (tj. Q, T anebo C, S), kombinace nejsou definované.
abs. | rel. | arg | význam |
---|---|---|---|
A | a | (rx ry rot large? sweep? x y)+ | 7 argumentů: |
rx | první poloměr elipsy | ||
ry | druhý poloměr elipsy | ||
rot | rotace elipsy vzhledem k ose x | ||
large? | flag: bude oblouk > 180° ? 0=kratký, 1=dlouhý | ||
sweep? | flag: který ze dvou zbývajících možných oblouků? 0=proti směru, 1=po směru hodinových ručiček | ||
x | x-ová souřadnice koncového bodu | ||
y | y-ová souřadnice koncového bodu |
Základní tvary
[editovat]Lépe a jednodušeji se s nimi pracuje než s cestami.
Základní geometrické tvary:
- úsečka (line)
- obdélník (rectangle)
- kružnice (circle)
- elipsa (ellipse)
- lomená čára (polyline)
- mnohoúhelník (polygon), což je uzavřená lomená čára
<line x1="od_x" y1="od_y" x2="do_x" y2="do_y" />
<rect x="levý_horní_x" y="levý_horní_y" width="nezáporná_šířka" height="nezáporná_výška" />
<circle cx="střed_x" cy="střed_y" r="poloměr" />
<ellipse cx="střed_x" cy="střed_y" rx="poloosa_x" ry="poloosa_y" />
<polyline points="x1,y1 x2,y2 x3,y3" /> <!-- atd., čárky jen pro přehlednost -->
<polygon points="x1,y1 x2,y2 x3,y3" /> <!-- atd., čárky jen pro přehlednost -->
circle | rx="" ry="" | zakulacené rohy obdélníku = poloosy elipsy |
Styly
[editovat]Objekty můžou mít různé atributy, které je dále specifikují:
Barva: specifikuje se podobně jako v CSS (Cascading Style Sheet):
- hexadecimální tvar
- rgb(,,)
atributy | význam |
---|---|
stroke-width="4" | tloušťka stopy (implicitně v pixelech, ale možno i v %) |
stroke-linejoin="" | napojení: "miter" = ostré, "bevel"=tupé, "round"=zakulacené |
stroke-linecap="" | ukončení čáry: "butt"=ostré, "square"=čtvercové, "round"=zakulacené |
stroke="red" | barva stopy (červená) |
fill="#ffffaa" | výplň RGB (světle žlutá) |
group
[editovat]Seskupování objektů do skupin, groups, v XML tvoří uzly, které mohou mít např. společné attributy, např:
<g stroke-width="4">
<g stroke="red">
<!-- NĚJAKÉ OBJEKTY -->
</g>
<g stroke="#ffaa00">
<!-- NĚJAKÉ OBJEKTY -->
</g>
</g>
Text
[editovat]- Původní SVG podporovalo jen jednořádkový text, nyní i odstavcový text - standard SVG 1.2
Návody, seriály
[editovat]- Pavel Tišnovský - SVG in: Seriál Grafické formáty na rootu:
- 2007-08-02: Vektorový grafický formát SVG
- 2007-08-09: Cesty v souborech typu Scalable Vector Graphics
- 2007-08-16: Scalable Vector Graphics a základní geometrické tvary
- 2007-08-23: Vlastnosti cest a základních geometrických tvarů v SVG
- 2007-08-30: SVG - styly výplní a značky připojované ke křivkám
- 2007-09-06: Gradientní výplně a textové objekty v SVG
- 2007-09-20: Pokročilejší animace ve formátu SVG
- 2007-09-27: Podpora skriptování v grafickém formátu SVG
- 2007-10-04: Zpracování událostí při skriptování výkresů SVG
- 2007-09-13: Grafický formát SVG a animace
- Martin Hejral (2004..2006): Kurz SVG – tvorba vektorové grafiky v XML na interval.cz (19 dílů)
SVG editory
[editovat]- w:en:Comparison of vector graphics editors
- Richard Krejčí 2004-10-08: Sodipodi a Inkscape: open source alternativa Illustratoru na obzoru?
- http://wiki.inkscape.org/ Inkscape wiki
- w:inkscape
- w:en:inkscape
- nativní formát: SVG
- licence: GPL
- platformy: Linux a další UN*Xy, Windows, Mac OS X
sodipodi
[editovat]- http://sourceforge.net/projects/sodipodi/
- http://freshmeat.net/projects/sodipodi/
- w:en:Sodipodi
- licence: GPL
- Debian: balík sodipodi byl ještě v distribuci Sarge, pak už ne (maintainer Davide Puricelli (evo) s tím přestal)
- jeho nástupcem je Inkscape
editory s pouze částečnou podporou SVG
[editovat]- součást projektu OpenOffice.org
- licence: LGPL
- nativní formát: .odg
- údajně umí importovat i exportovat SVG
- Neustálé problémy s importem i exportem textů v SVG, viz: Vektorová grafika/Kychot
- Extenze:
- New SVG export filter (Technology Preview) – vypadá to zajímavě, ale trochu fousatě (odvolává se to na OpenOffice 1.1)
- w:en:Comparison of vector graphics editors uvádí, že import SVG je jen částečný pomocí nějaké extenze
- SVG Tiny Import/Export 1.0.0 – SVGTiny2OO.zip (1.5MB)
- SVG Import – poslední verze 1.2.2 z 2009-01-27 – soubor svg-import-1.2.2.oxt (5.5 MB), viz OpenOffice.org/SVG Import Filter
Adobe Illustrator
[editovat]- w:Adobe Illustrator
- w:en:Adobe Illustrator
- poslední verze: Illustrator CS4
- proprietární nativní formát: AI w:en:Adobe Illustrator Artwork
- importuje a EXPORTUJE SVG (od své verze 10), velmi přesný export, s importem je to horší, viz např.: Adobe Illustrator a SVG na Interval.cz
- ideální pro import a následné úpravy SVG je Inkscape
webové editory
[editovat]Litha-Paint
[editovat]- Podporuje prohlížeče Internet Explorer, Mozilla Firefox a Opera.
Utility a jiné programy pro SVG
[editovat]Konverze formátů
[editovat]PS to SVG
[editovat]Taková utilita dosud, pokud vím, neexistuje. Pracuje se na tom, že to bude umět ghostscript. Takže do té doby se to musí řešit oklikou:
- PS -> PDF ->SVG
- PS -> EPS -> SVG
PS to PDF
[editovat]- balík ghostscript obsahuje utility:
- ps2pdf12 – PS do PDF 1.2
- ps2pdf13 – PS do PDF 1.3
- ps2pdf14 – PS do PDF 1.4
- ps2pdf – link na ps2pdf* nejvyšší verse
PDF to SVG
[editovat]- pdftron.com: pdf2svg – trial verse
- http://freesvg.texterity.com:90/
- http://www.xmlhack.com/read.php?item=307
PS to SVG přes skencil
[editovat]Jako jiná možná posloupnost se používá:
eps2eps -dNOCACHE file.ps file2.ps
ps2epsi file2.ps file3.ps # problém s boundingboxem
pstoedit -f sk file3.ps file.sk # konverse na Sketch
skconvert file.sk file .svg # z balíku skencil
SVG to PDF
[editovat]PDF to PS
[editovat]- gs-comon obsahuje:
- pdf2ps - konverze PDF na PS a EPS
- gs-comon obsahuje:
- pdf2ps - konverze PDF na PS
- xpdf-utils obsahuje:
- pdftops - konverze PDF na PS nebo EPS; užití: pdftops -eps soubor.pdf
Další utility
[editovat]Debian
- gimp-svg balík pro otevření SVG souborů v GIMPu
- libsvg1 parser pro SVG soubory na disku či v bufferu
- librsvg2-common
- libsvg-dev parser pro SVG soubory na disku či v bufferu - development
- librsvg2-ruby1.8 knihovna pro použití renderu RSVG v ruby
- libsvg-ruby vytváření SVG grafiky v ruby
- libsvg-perl balík pro generování samostatných i in-line SVG objektů
- libsvg-graph-perl suita perlovských modulů pro ploting dat (v současné době podporuje plotting jedno-, dvoj- a trojrozměrných dat a grafy N-árních stromů)
- ksvg prohlížení SVG v KDE, Konqueroru či samostatných aplikacích
- librsvg2-dev rsvg je renderovací stroj pro SVG
- librsvg2-2
- libsvg-tt-graph-perl perlovská knihovna pro kreslení SVG grafů (koláčové, čárové, sloupcové, časové řady)
- openclipart-svg free SVG obrázky
- libimage-librsvg-perl rastrování SVG obrázků v perlu
- pstoedit
- xfig umí exportovat fig do různých formátů, mj. i SVG
- sodipodi - byl v sarge (oldstable)
Ubuntu:
(Hledám balíky v Synapticu, řetězec "svg")
- amaya – umí SVG, MathML aj.
- pdf2svg – konvertuje PDF na SVG – možnost použití při uploadu na Commons nebo Wikisource
- libsvg-tt-graph-perl – maluji SVG z perlu
- libwxsvg-dev – C++ knihovna pro renderování a manipulaci SVG
- libwxsvg0 – dtto
- LilyPond – umí ukládat noty v SVG
- pike – umí grafické formáty, i SVG
- potrace – vektorizuje bitmapy, primárně do EPS, ale umí i SVG a jiné
- python-uniconvertor – převádí pbrázky mezi různými formáty, používá sK1 engine (utilita: uniconvertor)
- rplot – umí exportovat do SVG
- ROOT http://root.cern.ch má plugin root-plugin-asimage, který ukládá výstupní grafiku v různých formátech, také v SVG
- scribus – umí načítat i ukládat v SVG
- skencil – interaktivní vektorový kreslící program, umí import a export do SVG
- xaralx – umí importovat a exportovat množství grafických formátů, m.j. SVG
- xaralx-svg – SVG plugin do xaralx
Diskuse, fóra
[editovat]- http://www.okoun.cz/boards/svg?contextId=1799579 klub SVG
- http://www.perlmonks.org/?node_id=480185 HTML and SVG to PDF
- Konverze SVG to PDF: pstoedit Translate Postscript and PDF to SVG
- http://jan.kollhof.net/projects/svg/svgpdf/index.xhtml embedding SVG in a PDF file: skript embeddSVG.py (přepsaný z perlu)
Související články
[editovat]- SVG na MediaWiki Commons:
- Recommendations for SVG
- SVGTranslate – překlad textů v SVG souborech
- Inkscape/Soubory