SVG
SVG = Scalable Vector Graphics
Odkazy
editovatPodstránky
editovat- /example – příklady
Předmluva
editovatNa 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
editovatSVG 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
editovatLé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
editovatObjekty 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
editovatSeskupová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
editovatLitha-Paint
editovat- Podporuje prohlížeče Internet Explorer, Mozilla Firefox a Opera.
Utility a jiné programy pro SVG
editovatKonverze formátů
editovatPS to SVG
editovatTaková 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
editovatJako 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
editovatPDF 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
editovatDebian
- 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