SVG

for beginner

@BOLD9

Seungwoo Hong

2023.10.06

  • Vector vs Raster
  • What is SVG?
  • ViewBox
  • Elements and Attributes
  • Practice - Clock
  • Practice - Doduct chart
  • Pratice - Path Animation

๐Ÿ“š Index

Vector vs Raster

Raster Graphics

Raster Graphics

Raster๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์ด๋ฏธ์ง€๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์‚ฌ๊ฐํ˜•์—๋Š” RGB(Sub pixcel)๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์ปฌ๋Ÿฌ๊ฐ€ ์ฑ„์›Œ์ง„ Element ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ  ์ด๊ฒƒ์„ Pixel์ด๋ผ ํ•œ๋‹ค. ๋˜ํ•œ pixcel๋กœ ๊ตฌ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ Bitmap์ด๋ผ ํ•œ๋‹ค.

Raster Graphics - bitmap

Binary image

bitmap์ด bit์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” pexel์ด ํ‘œํ˜„๋  ๋•Œ bit ์—ด๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Binary image ์ด๋ฏธ์ง€์—์„œ๋Š” ๊ฐ pexcel์€ 1bit๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ๋ฐ์Œ(1), ์–ด๋‘์›€(0)์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

Raster Graphics - bitmap

gray-scale image

ํ‘๋ฐฑ ์ด๋ฏธ์ง€๋Š” ๋‹จ์ˆœํžˆ ์–ด๋‘์›€, ๋ฐ์Œ์ด ์•„๋‹Œ ๋ฐ๊ธฐ์˜ ์ •๋„๋ฅผ ํ‘œํ˜„ํ•ด์•ผํ•˜๋Š”๋ฐ 8bit=1byte=255, 0~255 ์‚ฌ์ด ๊ฐ’์œผ๋กœ ๋ฐ๊ธฐ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ์ฆ‰, 1pexel ๋‹น 1byte๋กœ ํ‘œํ˜„๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Raster Graphics - bitmap

Color image

์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€๋Š” ์ƒ‰์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด pexel ์•ˆ์— 3๊ฐœ์˜ subpixce(8bit)l์„ ๊ฐ–๋Š”๋‹ค.

์ด๋•Œ 3๊ฐœ์˜ subpixel์€ ๊ฐ๊ฐ ๋น›์˜ ์‚ผ์›์ƒ‰์ธ Red, Green, Blue๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. 3๊ฐœ์˜ subpixcel์€ ํ•˜๋‚˜์˜ true color๋ฅผ ๋งŒ๋“ ๋‹ค.

Raster Graphics

๋Œ€ํ‘œ์ ์ธ raster ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€ ํ™•์žฅ์ž๋“ค

  • PNG
  • JPEG
  • GIF

๐Ÿค”Quiz 1

Pixcel์€ ๋ญ์— ์ค„์ž„๋ง์ผ๊นŒ?

๐Ÿค”Quiz 2

640x480ํฌ๊ธฐ์˜ Binary image๊ฐ€ ์žˆ๋‹ค.

์ด ์ด๋ฏธ์ง€๋Š” ๋ช‡ Byte์ผ๊นŒ?

Vector Graphics

Raster ์ด๋ฏธ์ง€๋Š” ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— Resolution์— ์ทจ์•ฝํ•˜๋‹ค. ๋ฐ˜๋ฉด์— Vector graphic์€ ์„ , ๊ณก์„ ์„ ํ†ตํ•œ ์—ฌ๋Ÿฌ ๋‹ค๊ฐํ˜•์„ ๋งŒ๋“ค๊ณ  ๊ทธ ๋‹ค๊ฐํ˜•์œผ๋กœ ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋‹ค๊ฐํ˜•์— ์ƒ‰์„ ์ฑ„์šฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ ๋‹ค. ๋”ฐ๋ผ์„œ ํ™•๋Œ€, ์ถ•์†Œ๋ฅผ ํ•ด๋„ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€์ง€ ์•Š๊ณ  ์™„๋ฒฝํ•œ ํ•ด์ƒ๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Vector vs Raster

What is svg?

SVG

SVG๋Š” Scalable Vector Graphic์˜ ์•ฝ์ž๋กœ Vector๊ทธ๋ž˜ํ”ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด๋‹ค. ํ™•๋Œ€/์ถ•์†Œ ์‹œ์—๋‚˜ ๋ฐ˜์‘ํ˜•์›น์„ ๋งŒ๋“ค๋•Œ resolution์„ ๋ณด์žฅํ•˜๋Š”๋ฐ ์œ ๋ฆฌํ•˜๋‹ค.

ย 

SVG๋Š” XML์ด๋ผ๋Š” ๋งˆํฌ์—…์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜๋ฉฐ HTML๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋ Œ๋”๋ง๋œ๋‹ค.

๋˜ํ•œ Scalable์ด๋ž€ ์ด๋ฆ„์— ๊ฑธ๋งž๊ฒŒ CSS๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐ element์˜ attribute๋ฅผ ํ†ตํ•ด animation, filter๋“ฑ ๋‹ค์–‘ํ•œ ํšจ๊ณผ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ย 

ํ•˜์ง€๋งŒ ๋‹จ์  ์—ญ์‹œ ์กด์žฌํ•œ๋‹ค. SVG๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋ณต์žกํ•ด์ ธ ๊ฐœ์ฒด ์ˆ˜ ๊ฐ€ ๋งŽ์•„์ง€๋ฉด SVG ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ ธ DOM์— ์•ˆ ์ข‹์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๊ณ  ๋ Œ๋”๋ง ์‹œ ์—ฐ์‚ฐ๋„ ๋งŽ์•„์ ธ ๋ Œ๋”๋ง ์„ฑ๋Šฅ๋„ ์•ˆ ์ข‹์•„์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•˜๊ฒŒ ํ•„์š”ํ•œ ๊ณณ์— ํ™œ์šฉํ•˜์ž.

SVG::example

ViewBox

ViewBox

svg element์—๋Š” viewBox๋ผ๋Š” ํŠน๋ณ„ํ•œ attribute๊ฐ€ ์žˆ๋‹ค.

View port - view port๋Š” svg๊ฐ€ ๊ทธ๋ ค์งˆย  ์บ”๋ฒ„์Šค์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์˜๋ฏธํ•œ. svg์˜ width, height attribute๋ฅผ ์‚ฌ์šฉํ•ด์„œ view port์˜ size๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ viewport๊ฐ€ canvas์˜ ํฌ๊ธฐ๊ฐ€ ๋œ๋‹ค.

view port๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ unit์œผ๋กœ ํฌ๊ธฐ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. default๋Š” px์ด๋‹ค.

units: px, ex, em, pt, pc, cm, mm, inch

viewBox ๋Š” viewport๋ฅผ ๊ธฐ์ค€์œผ๋กœ aspect ratio๋ฅผ ์ง€์ •ํ•˜๋Š” attribute์ด๋‹ค.

ViewBox - example

Syntax

viewBox="min-x min-y width height"

Elements & Attributes

๐Ÿค”Quiz 3

Element์™€ Attribute๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

SVG's Elements

  • rect
  • circle
  • ellipse
  • line
  • polyline
  • polygon
  • text
  • path
  • mask
  • defs
  • use
  • desc
  • ...

Elements - rect::attributes

x - x์œ„์น˜

y - y ์œ„์น˜

width - ์‚ฌ๊ฐํ˜•์˜ ๋„ˆ๋น„

height - ์‚ฌ๊ฐํ˜•์˜ ๋†’์ด

fill - ์‚ฌ๊ฐํ˜• ์ƒ‰

rx - radius(border) ๊ฐ€๋กœ์ถ•

ry - radius(border) ์„ธ๋กœ์ถ•

Elements - rect::example

Elements - circle

circle์€ย ์›์ (center) ๊ณผ ๋ฐ˜์ง€๋ฆ„(radius)์„

์‚ฌ์šฉํ•ด์„œ ์›์„ ๊ทธ๋ฆฐ๋‹ค.

Elements - circle::attributes

cx - ์›์ ์˜ x์ขŒํ‘œ

cy - ์›์ ์˜ y์ขŒํ‘œ

r - ์›์˜ ๋ฐ˜์ง€๋ฆ„, ์ฆ‰ r * 2๊ฐ€ ์›์˜ ์ง€๋ฆ„(ํฌ๊ธฐ)์ด ๋œ๋‹ค.

Elements - circle::example

Elements - ellipse

ellipse๋Š”ย ์›์ (center) ๊ณผ x์ถ• ๋ฐ˜์ง€๋ฆ„๊ณผ y์ถ• ๋ฐ˜์ง€๋ฆ„์„

์‚ฌ์šฉํ•ด์„œ ํƒ€์›์„ ๊ทธ๋ฆฐ๋‹ค.

Elements - ellipse::attributes

cx - ์›์ ์˜ x์ขŒํ‘œ

cy - ์›์ ์˜ y์ขŒํ‘œ

rx - ์›์˜ x์ถ• ๋ฐ˜์ง€๋ฆ„

ry - ์›์˜ y์ถ• ๋ฐ˜์ง€๋ฆ„

Elements - ellipse::example

Elements - line

line์€ 2๊ฐœ์„ ์ ์„ ์ด์šฉํ•˜์—ฌ ์„ ์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

Elements - line::attributes

x1 - ์‹œ์ž‘์ ์˜ x์ขŒํ‘œ

y1 - ์‹œ์ž‘์ ์˜ y์ขŒํ‘œ

x2 - ๋์ ์˜ x์ขŒํ‘œ

y2 - ๋์ ์˜ y์ขŒํ‘œ

Elements - line::example

Elements - polyline

polyline์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ ์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” "์ง์„ "์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

Elements - polyline::attributes

points - ์„ ์„ ์—ฐ๊ฒฐํ•  ์ (x,y ์ขŒํ‘œ ์Œ)๋“ค์˜ ๋ฆฌ์ŠคํŠธ

Elements - polyline::example

Elements - polygon

polygon์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ ์„ ์ด์šฉํ•˜์—ฌ ๋„ํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ์ง์„ ์„ ๋งŒ๋“ ๋‹ค.ย 

Elements - polygon::attributes

points - ๊ผญ์ง€์ (x,y ์ขŒํ‘œ ์Œ)๋“ค์˜ ๋ฆฌ์ŠคํŠธ

Elements - polygon::example

๐Ÿค”Quiz 4

Polyline๊ณผ Polygon์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

Elements - text

text๋Š”ย  ํ…์ŠคํŠธ ์š”์†Œ๋ฅผ ๊ทธ๋ฆฐ๋‹ค.

Elements - text::attributes

x - x์ขŒํ‘œ

y - y์ขŒํ‘œ

rotate - ๊ฐ ๋ฌธ์ž๋ณ„ ํšŒ์ „ ๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ

ย 

ย 

Elements - text::example

Elements - tspan

tspan์€ text์š”์†Œ์— subtext๋ฅผ ๋„ฃ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ์š”์†Œ์˜ ์šฉ๋„๋Š” ํŠน์ • subtext์— style์ด๋‚˜ position๋ฅผ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋‹ค.

Elements - tspan::example

Elements - g

g๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค์˜ ๊ทธ๋ฃจํ•‘ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ์ด๋‹ค.

๊ทธ๋ฃน ์•ˆ์— ์žˆ๋Š” ์š”์†Œ๋“ค์€ g์˜ ํšจ๊ณผ๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.ย 

ย 

๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ์š”์†Œ์— ํ•œ ๋ฒˆ์— ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.ย 

Elements - g::example

Elements - path

path๋Š” ์ง์„ , ๊ณก์„ ์„ ์ด์šฉํ•˜์—ฌ ์–ด๋–ค ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ์˜ ๋„ํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. SVG element ์ค‘ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

Elements - path::attributes

d - path๋ฅผ ์ •์˜ํ•œ๋‹ค.

ย  ย  ย  d๋Š” ๋‹ค์–‘ํ•œ command๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ย 

ย  ย  ย ๊ฐ command๋Š” ์ง์„ ๊ณผ ๊ณก์„ ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

Elements - path::attributes

d's commands

M, m - ๋ผ์ธ์˜ ์‹œ์ž‘์ ์˜ ์œ„์น˜๋ฅผ ์ด๋™ํ•œ๋‹ค.

L, l - ์‹œ์ž‘์ ์˜ ๋ถ€ํ„ฐ ์„ ์„ ๊ทธ์„ ๋์ ์„ ๋„ฃ๋Š”๋‹ค.

H, h - ์‹œ์ž‘์ ์œผ๋กœ ๋ถ€ํ„ฐ ๊ฐ€๋กœ ์„ ์„ ๊ธ‹๋Š”๋‹ค.

V, v - ์‹œ์ž‘์ ์œผ๋กœ ๋ถ€ํ„ฐ ์„ธ๋กœ ์„ ์„ ๊ธ‹๋Š”๋‹ค.

C, c - 4๊ฐœ์˜ ์ ์„ ์‚ฌ์šฉํ•œ 3์ฐจ ๋ฒ ์ง€์–ด ๊ณก์„ ์„ ๊ทธ๋ฆฐ๋‹ค.

Q, q - 3๊ฐœ์˜ ์ ์„ ์‚ฌ์šฉํ•œ 2์ฐจ ๋ฒ ์ง€์–ด ๊ณก์„ ์„ ๊ทธ๋ฆฐ๋‹ค.

A, a - ํ˜ธ๋ฅผ ๊ทธ๋ฆฐ๋‹ค.

Z, z - ๋์ ๊ณผ ์‹œ์ž‘์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

ย 

Elements - path

Bezier curve

์ œ์–ด์ 

Elements - path::example

Elements - defs

defs๋Š” ๋ฐ”๋กœ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์š”์†Œ์—์„œย  ์‚ฌ์šฉํ•  ํšจ๊ณผ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค.

Elements - defs::example

Elements - desc

desc๋Š” ์›น ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด ํ˜„ ์š”์†Œ์— ๋Œ€ํ•œ ์งง๊ฑฐ๋‚˜ ๊ธด ์„ค๋ช…์„ ๋„ฃ์–ด ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์„ค๋ช…์€ ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค.

Elements - desc::example

Elements - use

use๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉ๋œ ์š”์†Œ์˜ ๋™์ผํ•˜๊ฒŒ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์›๋ณธ์—์„œ ์‚ฌ์šฉ๋œ ์†์„ฑ์€ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์—†๋‹ค.

Elements - use::attritues

  • href - ์›๋ณธ ์š”์†Œ์˜ URL์„ ์ž…๋ ฅํ•œ๋‹ค.
  • [...rest] - ์›๋ณธ ์š”์†Œ์— ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ attribute๋“ค ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ, ์ด๋ฏธ ์›๋ณธ์—์„œ ์‚ฌ์šฉ๋œ attribute๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

Elements - use::example

Practice - Path Animation

Practice - Path Animation

Practice - Clock

Practice - Clock

Thank You!

Questions?

SVG

By Seungwoo Hong

SVG

  • 46