SlideShare a Scribd company logo
«Canvas API как инструмент для работы с графикой»
Andrew Fedotiuk
Front End Developer ( cc6.magister@gmail.com )
1
Вставить картинкой
DOM
SVG
Canvas
•
•
•
•
2
<canvas id="mainCanvas" width="640" height="480"> ? </canvas>
<canvas />
Создан компанией Apple в 2004 году, вошел в стандарт в 2006. 

HTML элемент, является частью HTML5, позволяет на низком уровне
динамически
взаимодействовать с растровой графикой - визуализировать
данные, манипулировать
изображением, фотографиями, создавать
анимации и даже обрабатывать видео в реальном
времени. 

3
2d
Контекст рендеринга (canvas grid)
const canvas = document.getElementById("mainCanvas");
const ctx = canvas.getContext(" ");
ctx.fillStyle = "blue";
ctx.fillRect(50, 50, 150, 150);
Для того что бы отобразить на canvas что либо
необходимо получить доступ к его
контексту, в
данном
случае поговорим о 2D контексте.
01.
02.
03.
04.
05.
4
fillStyle
strokeStyle
fillRect
strokeRect
clearRect
Рисование фигур (прямоугольник)
В отличии от SVG на canvas можно рисовать только 2 фигуры:
прямоугольник и путь (списки точек,
соединенных линиями).
ctx. = "red";
ctx. = "#ccc";
ctx. (x, y, w, h);
ctx. (x, y, w, h);
ctx. (x, y, w, h);
01.
02.
03.
04.
05.
5
beginPath
moveTo
lineTo
closePath
stroke fill
lineWidth
lineCap
lineJoin
setLineDash
Рисование фигур -линия (путь)
У самурая нет цели, только путь...
Жизнь самурая Миямото Мусаси
ctx. ();
ctx. (x, y);
ctx. (x, y);
ctx. (); / -
ctx. (); / ctx. ();
ctx. = 10;
ctx. = "butt" || "round" || "square";
ctx. = "bevel" || "round" || "miter"
ctx. = [] || [1,1]
“01.
02.
03.
04.
05.
01.
02.
03.
04.
6
arc
arcTo
quadraticCurveTo
bezierCurveTo
Рисование фигур -дуга/кривая (путь)
ctx. (x,y,radius,startAngle,endAngle,[,counterclockwise])
ctx. (x1,y1,x2,y2,radius)
ctx. (cpx,cpy,endX,endY)
ctx. (cpx1,cpy1,cpx2,cpy2,endX,endY)
01.
02.
03.
04.
7
createLinearGradient
createRadialGradient
addColorStop
Градиенты
const linGrad = ctx. (startX, startY, endX, endY);
const radGrad = ctx. (startXin, startYin, rIn,
startXOut, startYOut, rOut);
someGrad. (offset, color);
А вот конический градиент внезапно поддерживается только в Firefox
01.
02.
03.
04.
05.
8
fillText
strokeText
font
textAlign
textBaseline
direction
measureText
shadowOffsetX
shadowOffsetY
shadowBlur
shadowColor
Текст и тени
сtx. (text, x, y [, maxWidth]);
сtx. (text, x, y [, maxWidth]);
сtx. ="10px sans-serif"
сtx. ="start"
сtx. ="alphabetic" || top ||
hanging || middle || ideographic || bottom
сtx. ="inherit" || ltr || rtl
const text = сtx. ("text");
сtx. =float
сtx. =float
сtx. =float
сtx. =float
01.
02.
03.
04.
05.
06.
07.
08.
09.
01.
02.
03.
04.
9
Изображение:
HTMLImageElement
SVGImageElement
HTMLVideoElement
HTMLCanvasElement
drawImage (image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
ctx. createPattern (image,"repeat" || "repeat-x" || "repeat-y" || "no-repeat");
•
•
•
•
10
imageSmoothingEnabled
globalCompositeOperation
globalAlpha
clip
Наложение слоев,сглаживание,маски


ctx. = boolean;
ctx. = type;
ctx. = 1;
ctx. ();
01.
02.
03.
04.
11
getImageData
toDataURL
toDataURL
toBlob
Работа с пикселями / сохранение canvas
const myImageData = ctx. (left, top, width, height);
canvas. ('image/png');
canvas. ('image/jpeg', quality);
canvas. (_callback_, _type_, _encoderOptions_)
01.
02.
03.
04.
05.
12
События и анимация
Как таковых ивентов в canvas нет , но мы всегда можем использовать
DOM-ивенты, а так же рисовать
на canvas по истечению определенного
времени. Для этого можно использовать несколько методов:
setInterval(function, delay)
setTimeout(function, delay)
requestAnimationFrame(callback)
•
•
•
13
Разделение на слои и хитбоксы


14
save
restore
translate
rotate
scale
Трансформации и повороты
ctx. ()
ctx. ()
ctx. (x, y)
ctx. (angle)
ctx. (x,y)
01.
02.
03.
04.
05.
06.
15
Что же дальше?
Konva.js (by Anton Lavrenov)
PIXI.js
Phaser.js
three.js
babylon.js
playcanvas
•
•
•
•
•
•
16
Ресурсы
shower(движок презентации)
developer.mozilla
w3schools
stackoverflow
html5gamedevs (форум)
GameDev for Web (телеграм чатик где всегда помогут)
1.
2.
3.
4.
5.
6.
17
18
Спасибо за
внимание
19

More Related Content

PDF
Путь к WebGL через THREE.js | Odessa Frontend Meetup #12
PPTX
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...
PPTX
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
PPT
20111204 computer graphics_galinsky_lecture12_real_time
PDF
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
PPS
Оптимизация производительности ActionScript
PPTX
Михаил Черномордиков Ie9
PDF
Разработка игр с помощью Cocos2d
Путь к WebGL через THREE.js | Odessa Frontend Meetup #12
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
20111204 computer graphics_galinsky_lecture12_real_time
«3D-плеер на WebGL», Василика Климова, MoscowJS 21
Оптимизация производительности ActionScript
Михаил Черномордиков Ie9
Разработка игр с помощью Cocos2d

Similar to Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18 (20)

PDF
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
PDF
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
PDF
Ренессанс графики на клиенте
PDF
Антон Корзунов "Графика на карте в API 2.0"
PDF
Пора учить WebGL
PDF
Оптимизация графики на практике
PPT
МАПО Лаба №1
PDF
От энтузиаста к разработчику
PDF
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
PDF
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
PDF
PPSX
Moving from Flash to HTML5 – converting large projects
ODP
SVG in game development
PDF
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
PDF
Как анимировать тысячи объектов на карте и не подвесить браузер
PPT
Кроссбраузерные решения в рекламной сети Яндекса
PDF
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
PPTX
Редактор Mail.ru. Frontend
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
Ренессанс графики на клиенте
Антон Корзунов "Графика на карте в API 2.0"
Пора учить WebGL
Оптимизация графики на практике
МАПО Лаба №1
От энтузиаста к разработчику
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Moving from Flash to HTML5 – converting large projects
SVG in game development
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как анимировать тысячи объектов на карте и не подвесить браузер
Кроссбраузерные решения в рекламной сети Яндекса
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Редактор Mail.ru. Frontend
Ad

More from OdessaFrontend (20)

PDF
Викторина | Odessa Frontend Meetup #19
PDF
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
PDF
Великолепный Gatsby.js | Odessa Frontend Meetup #19
PDF
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
PDF
Викторина | Odessa Frontend Meetup #17
PDF
Антихрупкий TypeScript | Odessa Frontend Meetup #17
PDF
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
PDF
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
PPTX
Объекты в ECMAScript | Odessa Frontend Meetup #16
PPTX
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
PPTX
Cлайдер на CSS | Odessa Frontend Meetup #16
PDF
Современный станок верстальщика
PDF
Викторина | Odessa Frontend Meetup #15
PDF
DRY’им Vuex | Odessa Frontend Meetup #15
PDF
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
PDF
Пощупать 3д в браузере | Odessa Frontend Meetup #15
PDF
Викторина | Odessa Frontend Meetup #14
PDF
Викторина | Odessa Frontend Meetup #13
PPTX
Структуры данных в JavaScript | Odessa Frontend Meetup #13
PPTX
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #19
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Викторина | Odessa Frontend Meetup #17
Антихрупкий TypeScript | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
Объекты в ECMAScript | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
Современный станок верстальщика
Викторина | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
Ad

Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18