Le format SVG
<?xml version="1.0" encoding="utf-8"?> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="200"> <title>Exemple simple de figure SVG</title> <desc>Cette figure est constituée d'un rectangle, d'un segment de droite et d'un cercle.</desc> <rect width="290" height="190" x="10" y="10" fill="#0F0"/> <line x1="15" y1="15" x2="285" y2="185" stroke="#F00" stroke-width="5px"/> <circle cx="120" cy="90" r="75" fill="#F0F"/> <text x="20" y="70" style="font-size:35px;fill:#666">Bonjour à tous</text> </svg>
<rect width="100" height="50" x="10" y="5" rx="15" ry="25"/>
les rayons de l'ellipse ne peuvent être supérieurs à la moitié de la largeur du rectangle.
<circle r="100" cx="250" cy="105" fill="#FF0"/> <ellipse rx="100" ry="50" cx="110" cy="80"/>
<line x1="10" y1="20" x2="260" y2="290"/> <polyline points="50,10, 100,280, 190,290, 290,10"/>
<polygon points="475,50, 518,74, 518,125, 475,150, 431,124, 431,75"/>
<path d="M 10,10 C 500,0 0,500 500,500 1000,500 0,0 10,500 z"/>
Les courbes de Bézier ont étés inventées par la français Pierre Bézier à la fin du XXe. Cette invention géniale est omniprésente dans toutes les approches modernes du dessin.
type | nom complet | description |
---|---|---|
M | moveto | déplacement du crayon |
L | lineto | tire un trait depuis le dernière position |
H | horizontal lineto | trait horizontal depuis le dernière position |
V | vertical lineto | trait vertical depuis le dernière position |
C | curveto | courbe de Bézier cubique |
S | smooth curveto | idem mais sans angles |
Q | quadratic Bézier curve | courbe de Bézier quadratique |
T | smooth quadratic Bézier curveto | idem mais sans angles |
A | elliptical Arc | arc d'ellipse |
Z | closepath | fermeture du contour |
<rect width="100" height="20" x="10" y="20" transform="rotate(45) translate(40,-60)"/>
L'ordre des transformations est important !
<g style="fill:#53F;stroke:#999;stroke-width:4" transform="rotate(70, 200, 120) scale(0.8)"> <rect x="100" y="150" width="150" height="200" fill="#8F0"/> <ellipse rx="50" ry="100" cx="200" cy="110"/> </g>
On n'est pas obligé de déclarer le contenu à référencer dans un bloc defs, dans ce cas il apparaîtra également lors de sa déclaration.
Lors de l'utilisation d'une référencer par use des attributs peuvent être définis, ceux-ci surchargerons l'objet référencé.
<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs style="stroke-width:1"> <rect id="r1" style="fill:#F00;stroke:#555" width="18" height="18"/> <rect id="r2" style="fill:#FCF;stroke:#999" width="18" height="18"/> </defs> <use x="10" y="10" xlink:href="#r1"/> <use x="10" y="30" xlink:href="#r2"/> <use x="10" y="50" xlink:href="#r1"/> <use x="30" y="10" xlink:href="#r2"/> <use x="30" y="30" xlink:href="#r1"/> <use x="30" y="50" xlink:href="#r2"/> <use x="50" y="10" xlink:href="#r1"/> <use x="50" y="30" xlink:href="#r2"/> <use x="50" y="50" xlink:href="#r1"/> </svg>
<path d="M 10,60 C 900,0 0,500 990,500" id="p1" style="fill:none;stroke:#0F0;stroke-width:10"/> <text fill="#333" style="font-size:35px"> <textPath xlink:href="#p1"><tspan dx="40" dy="-20">Comme il est long parfois le chemin séparant le début de la fin...</tspan></textPath> </text>
La balise tspan n'est nécessaire que si l'on désire apporter des modifications (décalages) au texte initial. Elle permet également de gérer plusieurs mises en formes au fil d'une même phrase.
clipping.
<clipPath id="la-decoupe"> <path d="M 10,10 T 300,10 200,200 500,200 z"/> <circle r="130" cx="150" cy="100"/> </clipPath> <circle clip-path="url(#la-decoupe)" clip-rule="evenodd" r="145" cx="300" cy="150" style="fill:#FF6;stroke:#796;stroke-width:6"/>
clippingle masquage atténue l'opacité de l'objet cible en proportion inverse de sa luminance.
<mask id="le-masque"> <path d="M 10,10 T 300,10 200,200 500,200 z" style="fill:#EEE;stroke:#DDD;stroke-width:10"/> <circle r="130" cx="150" cy="100" style="fill:#555;stroke:#999;stroke-width:10"/> </masque> <circle mask="url(#le-masque)" r="145" cx="300" cy="150" style="fill:#FF6;stroke:#796;stroke-width:6"/>
stop colorset niveau de transparence disposés à des points précis de cet axe.
<defs> <linearGradient id="degrade" x1="0%" y1="0%" x2="100%" y2="100%"> <stop offset="0%" style="stop-color:#FF0;stop-opacity:1"/> <stop offset="50%" style="stop-color:#FFF;stop-opacity:0.5"/> <stop offset="100%" style="stop-color:#F00;stop-opacity:1"/> </linearGradient> </defs> <rect x="20" y="20" width="280" height="170" fill="url(#degrade)"/>
stop colors(même principe que pour les gradients linéaires).
<defs> <radialGradient id="degrade" cx="50%" cy="50%" r="50%" fx="30% fy="30%"> <stop offset="0%" style="stop-color:#FF0;stop-opacity:1"/> <stop offset="50%" style="stop-color:#FFF;stop-opacity:0.5"/> <stop offset="100%" style="stop-color:#F00;stop-opacity:1"/> </radialGradient> </defs> <rect x="20" y="20" width="280" height="170" fill="url(#degrade)"/>
On voit l'importance du W3C sur lequel reposent l'ensemble des formats communément utilisés sur le Web et plus généralement dans les échanges d'informations entre les systèmes que ce soit pour le XML, le xHTML, le SVG...