Kurz SVG – vyplňování 2.
V předchozím článku jsme si probrali základy vyplňování vektorových objektů ve Scalable Vektor Graphics. Tentokrát se budeme věnovat té zajímavější části tématu – přechodům barev, používání textur a nastavování průhlednosti objektů.
Dědičnost atributů
Dědičnost probíhá obdobně jako například u stylů v HTML. Jen si musíte dobře uvědomit, že vyplňování samotné se aplikuje na každý synovský objekt individuálně – nikdy ne na celou skupinu (na nadřazený rodičovský objekt)!
Konstantní barva
Hodnoty barev lze zapisovat v prostoru sRGB – shodně s HTML nebo CSS – například stroke="blue"
nebo fill="#FF8080"
. Norma podporuje i správu barev pomocí ICC profilů.
Přechody barev
Teoreticky definovat přechod barev můžeme třeba následovně: „Mějme dva prostorově oddělené body se dvěma různými barvami. Přechod pak vznikne tím, jak se po spojnici těchto dvou bodů mění (přechází) barva prvního bodu v barvu druhého bodu.“
SVG umožňuje ovšem daleko lepší triky – krom toho, že přechody mohou být lineární nebo kruhové, lze na úsečce mezi krajními definičními body SVG přechodu rozmístit libovolnou posloupnost zlomových (přechodových) barevných bodů a vyrobit si tak třeba duhu. Navíc jsou možné různé způsoby zrcadlení či opakování definované základní posloupnosti.
Přechodový (zlomový) bod – element stop
Elementy stop
určují barvu ve zlomových bodech a musí být proto v přechodu minimálně dva! Mohou nést následující atributy:
- stop-color – barva
- stop-opacity – průhlednost (může se libovolně měnit podél přechodu, stejně jako jakýkoli jiný z RGB kanálů!)
- offset – definuje umístění bodu na úsečce mezi dvěma hraničními body přechodu, proto bude většinou v rozsahu 0 až 1, respektive 0 až 100 % (pokud nebyl změněn výchozí souřadnicový systém – viz níže)
Lineární přechod – element linearGradient
Element linearGradient
je používán pro definici lineárního přechodu. Jeho obsahem je sada elementů stop
. Může nést následující atributy:
- id – jméno pro pozdější odkazování
- gradientUnits – (nepovinný) vybere jeden ze dvou možných souřadnicových systémů pro udávání hodnot atributů („x1“, „y1“, „x2“, „y2“) definujících vektor přechodu:
- „userSpaceOnUse“ – použije se aktuální systém souřadnic právě vyplňovaného objektu
- „objectBoundingBox“ – tato výchozí hodnota definuje souřadnicový systém orientovaný uvnitř rámečku ohraničujícího konkrétní objekt, na který se přechod aplikuje – souřadnice (0,0), respektive (0%,0%), jsou v levém horním rohu a (1,1), respektive (100%,100%), v pravém spodním rohu ohraničení vyplňovaného objektu
Podobná konvence se v udávání rozměrů, vztažených k nějakému objektu, opakuje na mnoha místech, dobře si ji zapamatujte!
- x1, y1, x2, y2 – (nepovinné) dva páry souřadnic určují úsečku, podél které se přechod vykresluje; výchozí hodnoty: (0,0) a (1,1) – ve většině aplikací je proto ani nebudete muset nastavovat
- gradientTransform – (nepovinný) seznam dodatečných souřadnicových transformací, jež se aplikují na přechod
- spreadMethod – (nepovinný) určuje opakování nadefinovaného přechodu – 1x, zrcadlení nebo nekonečné opakování – hodnoty: pad (výchozí), reflect, repeat
- xlink:href – (nepovinný) odkaz na jiný přechod (můžete tak složit komplexní sekvenci barev z několika jednodušších přechodů)
<?xml version=“1.0″ standalone=“no“?>
<!DOCTYPE svg PUBLIC „-//W3C//DTD SVG 1.1//EN“
„http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd“>
<svg width=“320px“ height=“160px“ viewBox=“0 0 800 400″
xmlns=“http://www.w3.org/2000/svg“ version=“1.1″>
<title>5.9.2 Linear gradient paint server</title>
<g>
<defs>
<linearGradient id=“MyGradient“>
<stop offset=“5%“ stop-color=“#F60″ />
<stop offset=“95%“ stop-color=“#FF6″ />
</linearGradient>
</defs>
<!– zde je vykreslen prechod –>
<rect fill=“url(#MyGradient)“ stroke=“black“ stroke-width=“5″
x=“100″ y=“100″ width=“600″ height=“200″/>
<!– obrys platna –>
<rect fill=“none“ stroke=“blue“
x=“1″ y=“1″ width=“798″ height=“398″/>
</g>
</svg>
Zobrazení lineárního přechodu (originální SVG, cca 1 kB)
Kruhový přechod – element radialGradient
Element radialGradient
je používán pro definici kruhového přechodu. Jeho obsahem je sada elementů stop
. Může nést následující atributy:
- id – jméno pro pozdější odkazování
- gradientUnits – (nepovinný) vybere jeden ze dvou možných souřadnicových systémů pro udávání atributů („cx“, „cy“, „r“, „fx“, „fy“) definujících kružnice přechodu:
- „userSpaceOnUse“ – použije se aktuální systém souřadnic právě vyplňovaného objektu
- „objectBoundingBox“ – tato výchozí hodnota definuje souřadnicový systém orientovaný uvnitř rámečku ohraničujícího konkrétní objekt, na který se přechod aplikuje – souřadnice (0,0), respektive (0%,0%), jsou v levém horním rohu a (1,1), respektive (100%,100%), v pravém spodním rohu ohraničení vyplňovaného objektu
- cx, cy, r – (nepovinné) definují vnější, největší kružnici v přechodu; výchozí hodnoty: 50%
- fx, fy – (nepovinný) středový bod přechodu, kterému odpovídá přechodový bod na 0%; výchozí hodnota = „cx“, „cy“
- gradientTransform – (nepovinný) seznam dodatečných souřadnicových transformací, jež se aplikují na přechod
- spreadMethod – (nepovinný) určuje opakování nadefinovaného přechodu – 1x, zrcadlení nebo nekonečné opakování – hodnoty: pad (výchozí), reflect, repeat
- xlink:href – (nepovinný) odkaz na jiný přechod (můžete tak složit komplexní sekvenci barev z několika jednodušších přechodů)
<?xml version=“1.0″ standalone=“no“?>
<!DOCTYPE svg PUBLIC „-//W3C//DTD SVG 1.1//EN“
„http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd“>
<svg width=“320px“ height=“160px“ viewBox=“0 0 800 400″
xmlns=“http://www.w3.org/2000/svg“ version=“1.1″>
<title>5.9.3 Radial gradient paint server</title>
<g>
<defs>
<radialGradient id=“MyGradient“
gradientUnits=“userSpaceOnUse“
cx=“400″ cy=“200″ r=“300″ fx=“400″ fy=“200″>
<stop offset=“0%“ stop-color=“red“ />
<stop offset=“50%“ stop-color=“blue“ />
<stop offset=“100%“ stop-color=“red“ />
</radialGradient>
</defs>
<!– vykresleni prechodu zde –>
<rect fill=“url(#MyGradient)“ stroke=“black“ stroke-width=“5″
x=“100″ y=“100″ width=“600″ height=“200″/>
<!– obrys platna –>
<rect fill=“none“ stroke=“blue“
x=“1″ y=“1″ width=“798″ height=“398″/>
</g>
</svg>
Zobrazení kruhového přechodu (originální SVG, cca 2 kB)
Vzorky alias textury
Element pattern
slouží k vyplnění dané plochy předdefinovaným grafickým prvkem, který je pravidelně rozmnožen (replikován) s konstantním opakováním podél obou os (X, Y) tolikráte, aby vyplnil celou definovanou plochu. Může nést následující atributy:
- patternUnits – (nepovinný) vybere jeden ze dvou možných souřadnicových systémů pro atributy („x“, „y“, „width“, „height“) definující replikovaný vzorek:
- „userSpaceOnUse“ – použije se aktuální systém souřadnic právě vyplňovaného objektu
- „objectBoundingBox“ – tato výchozí hodnota definuje souřadnicový systém orientovaný uvnitř rámečku ohraničujícího konkrétní objekt, na který se přechod aplikuje – souřadnice (0,0), respektive (0%,0%), jsou v levém horním rohu a (1,1), respektive (100%,100%), v pravém spodním rohu ohraničení vyplňovaného objektu
- patternContentUnits – (nepovinný) definuje souřadnicový systém pro obsah vzorku (pokud byste současně nadefinovali i viewBox, bude patternContentUnits ignorován), význam hodnot viz atribut patternUnits
- patternTransform – (nepovinný) seznam dodatečných souřadnicových transformací, jež se aplikují na texturu
- xlink:href – (nepovinný) odkaz na jinou texturu (můžete tak složit komplexní texturu z několika jednodušších)
<?xml version=“1.0″ standalone=“no“?>
<!DOCTYPE svg PUBLIC „-//W3C//DTD SVG 1.1//EN“
„http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd“>
<svg width=“320px“ height=“160px“ viewBox=“0 0 800 400″
xmlns=“http://www.w3.org/2000/svg“ version=“1.1″>
<title>5.10 Ukazka vzorku</title>
<defs>
<pattern id=“TrianglePattern“ patternUnits=“userSpaceOnUse“
x=“0″ y=“0″ width=“100″ height=“100″
viewBox=“0 0 10 10″ >
<path d=“M 1 1 L 9 1 L 5 9 z“ fill=“red“ stroke=“blue“ />
</pattern>
</defs>
<!– elipsa vyplnena vzorkem –>
<ellipse fill=“url(#TrianglePattern)“
stroke=“violet“ stroke-width=“5″
cx=“400″ cy=“200″ rx=“350″ ry=“150″ />
<!– obrys platna –>
<rect fill=“none“ stroke=“blue“
x=“1″ y=“1″ width=“798″ height=“398″/>
</svg>
Zobrazení SVG textury (originální SVG, cca 1 kB)
Průhlednost objektu a skupiny
Atribut „opacity“ určuje celkovou průhlednost jednoho prvku nebo celé skupiny – lze jej přidat například i do elementu g
. Existuje ovšem zásadní rozdíl mezi průhlednostmi popsanými v předchozích článcích a touto, určenou v atributu „opacity“. Zatímco totiž ty předcházející se projevily ihned v místě zápisu v bezprostřední akci vykreslení, tuto můžeme chápat jako jakýsi postprocessing (následné zpracování). Teprve až poté, co je vykreslen celý objekt nebo skupina, je pomocná grafická paměť sloučena s pozadím s přihlédnutím k hodnotě „opacity“. Pro lepší pochopení doporučuji znovu prostudovat zobrazovací a vykreslovací model SVG.
<?xml version=“1.0″ standalone=“no“?>
<!DOCTYPE svg PUBLIC „-//W3C//DTD SVG 20010904//EN“
„http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd“>
<svg width=“320px“ viewBox=“0 0 1200 350″
xmlns=“http://www.w3.org/2000/svg“>
<title>5.11 Vliv atributu ‚opacity‘ na skupinu</title>
<rect x=“100″ y=“100″ width=“1000″ height=“150″ fill=“blue“ />
<!– cervene kruhy se zvetsujici se pruhlednosti –>
<circle cx=“200″ cy=“100″ r=“50″ fill=“red“ opacity=“1″ />
<circle cx=“400″ cy=“100″ r=“50″ fill=“red“ opacity=“.8″ />
<circle cx=“600″ cy=“100″ r=“50″ fill=“red“ opacity=“.6″ />
<circle cx=“800″ cy=“100″ r=“50″ fill=“red“ opacity=“.4″ />
<circle cx=“1000″ cy=“100″ r=“50″ fill=“red“ opacity=“.2″ />
<!– nasleduje demonstrace ‚opacity‘ na prvku ‚g‘ –>
<g opacity=“1″ >
<circle cx=“182.5″ cy=“250″ r=“50″ fill=“red“ opacity=“1″ />
<circle cx=“217.5″ cy=“250″ r=“50″ fill=“green“ opacity=“1″ />
</g>
<!– zde SPRAVNE MUSI zeleny kruh zcela vyriznout cerveny –>
<g opacity=“.5″ >
<circle cx=“382.5″ cy=“250″ r=“50″ fill=“red“ opacity=“1″ />
<circle cx=“417.5″ cy=“250″ r=“50″ fill=“green“ opacity=“1″ />
</g>
<!– zeleny kruh umisten NAD cervenym –>
<g opacity=“1″ >
<circle cx=“582.5″ cy=“250″ r=“50″ fill=“red“ opacity=“.5″ />
<circle cx=“617.5″ cy=“250″ r=“50″ fill=“green“ opacity=“.5″ />
</g>
<!– zeleny kruh umisten POD cervenym –>
<g opacity=“1″ >
<circle cx=“817.5″ cy=“250″ r=“50″ fill=“green“ opacity=“.5″ />
<circle cx=“782.5″ cy=“250″ r=“50″ fill=“red“ opacity=“.5″ />
</g>
<!– zde SPRAVNE MUSI zeleny kruh zcela vyriznout cerveny –>
<g opacity=“.5″ >
<circle cx=“982.5″ cy=“250″ r=“50″ fill=“red“ opacity=“.5″ />
<circle cx=“1017.5″ cy=“250″ r=“50″ fill=“green“ opacity=“1″ />
</g>
<!– obrys platna –>
<rect x=“2″ y=“2″ width=“1196″ height=“346″
fill=“none“ stroke=“blue“ />
</svg>
Vliv atributu „opacity“ na skupinu (originální SVG, cca 1 kB)
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
Jak se chránit před podvody na internetu – část 1
8. října 2024 -
Jak se chránit před podvody na internetu – část 2
14. října 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024