Interested Article - Canvas (HTML)

HTML

Canvas ( англ. canvas — « холст », рус. канва́с ) — элемент HTML5 , предназначенный для создания растрового двухмерного изображения при помощи скриптов, на языке JavaScript . Начало отсчёта блока находится слева сверху. От него и строится каждый элемент блока . Размер пространства координат не обязательно отражает размер фактической отображаемой площади . По умолчанию его ширина равна 300 пикселям, а высота 150 .

Используется, как правило, для отрисовки графиков для статей и игрового поля в некоторых браузерных играх. Но также может использоваться для встраивания видео в страницу и создания полноценного плеера.

Используется в WebGL для аппаратного ускорения 3D-графики .

Компанией Google была выпущена JavaScript-библиотека 11 февраля 2013 года. , которая позволяла работать с Canvas в браузерах IE7 и IE8.

Canvas может усложнить задачу роботам по распознаванию Капчи . При использовании canvas с сервера загружается не картинка, а набор точек (или алгоритм прорисовки), по которым браузер прорисовывает картинку (капчу) .

История

Впервые элемент canvas был представлен компанией Apple в движке WebKit для Mac OS X с целью последующего его использования в приложениях Dashboard и Safari .

Ситуацию с отсутствием canvas в IE исправила компания Google , выпустившая собственное расширение, написанное на JavaScript, под названием ExplorerCanvas .

На сегодняшний день canvas чаще используется для построения графиков, простой анимации и игр в браузерах . Группа WHATWG предлагает использовать canvas как стандарт для создания графики в новых поколениях веб-приложений .

Организация Mozilla Foundation ведёт проект под названием Canvas 3D , целью которого является добавить низкоуровневую поддержку графических ускорителей для отображения трёхмерных изображений через HTML-элемент canvas. Наряду с этим существуют библиотеки, реализующие работу с трёхмерными моделями, среди них от 9 мая 2017 на Wayback Machine .

Поддержка

IE Firefox Safari Chrome Opera iOS Android
9.0+ 3.0+ 3.0+ 3.0+ 10.0+ 3.0+ 1.0+

Возможности

canvas позволяет разместить на холсте: картинку, видео, текст. Залить всё это сплошным цветом, либо обвести контуры или даже добавить градиент . Добавление теней похожих на свойства css3 box-shadow и text-shadow. И, наконец, отрисовка фигур с помощью указания контрольных точек. Причём можно изменять как ширину линий, так и кисть рисовки линий, стиль соединений линий .

Особенности

  • Изменение высоты или ширины холста сотрет всё его содержимое и все настройки, проще говоря он создастся заново ;
  • Начало отсчёта (точка 0,0) находится в левом верхнем углу . Но её можно сдвигать ;
  • 3D-контекста нет, есть отдельные разработки, но они не стандартизованы ;
  • Цвет текста можно указывать аналогично CSS, впрочем, как и размер шрифта.

Примеры или паттерны оптимизации

В случае, если вам нет необходимости перерисовывать холст, но нужно производить манипуляции с ним, то вы можете «сфотографировать» весь холст и сохранить в переменную. И работать уже с этим рисунком, не заставляя канвас отрисовываться после каждой манипуляции.

Если обновляться должно не всё изображение, а только его часть, то вы можете стирать определенную зону на холсте и рисовать её заново.

Браузеры могут оптимизировать анимации, идущие одновременно, уменьшив число reflow и repaint до одного, что в свою очередь приведёт к повышению точности анимации. Например анимации на JavaScript, синхронизированные с CSS transitions или SVG SMIL. Плюс ко всему если выполняется анимация в табе, который невидим, браузеры не будут продолжать перерисовку, что приведёт к меньшему использованию CPU, GPU, памяти и как следствие снизит расход батареи в мобильных устройствах . Для этого используйте requestAnimationFrame.

Все текущие браузеры имеют фильтр размытия изображения при его увеличении. Его стоит использовать, если вы часто попиксельно обрабатываете картинку. Путём уменьшения картинки, например, в два раза и последующего аппаратного увеличения её с помощью фильтра .

Если игра позволяет отдельно обрабатывать фон и элементы игры, то имеет смысл сделать два холста друг над другом .

Для очистки канвы лучшим средством будет использование clearRect , однако, если очищать только необходимые участки, то скорость возрастет ещё больше.

Критика

  • Чрезмерно нагружает процессор и оперативную память;
  • Из-за ограничения сборщика мусора нет возможности очистить память;
  • Необходимо самому обрабатывать события с объектами ;
  • Плохая производительность при высоком разрешении ;
  • Приходится отрисовывать отдельно каждый элемент .
  • Возможность создания на страницах специальных «маячков», т. н. Canvas Fingerprinting , для отслеживания пользователей в сети.

Преимущества

  • В отличие от SVG гораздо удобнее иметь дело с большим числом элементов;
  • Имеет аппаратное ускорение ;
  • Можно манипулировать каждым пикселем ;
  • Можно применять фильтры обработки изображений ;
  • Есть много библиотек .

Использование

Использование и операции с элементом возможны только через JavaScript.

<!doctype html>
<html lang="ru">
  <head>
    <title>canvas</title>
    <script src="example.js"></script>
  </head>
  <body>
    <canvas id="canvas">Этот элемент не поддерживается</canvas>
  </body>
</html>

Файл example.js

  var canvas  = document.getElementById('canvas'),
      context = canvas.getContext('2d');
function onLoadHandler() {
  /*
    Далее какие-либо действия над холстом
  */
}
window.onload = onLoadHandler;

Примеры

Библиотеки

  • libCanvas — лёгкий, но тем не менее функциональный фреймворк canvas
  • Processing.js — порт языка визуализации Processing
  • EaselJS — библиотека с API похожим на Flash
  • PlotKit — библиотека для создания чартов и графики
  • Rekapi — API Canvas для создания анимации на кейфреймах
  • PhiloGL — фреймворк WebGL для визуализации данных, разработки игр и креативного кодирования.
  • JavaScript InfoVis Toolkit — создаёт интерактивную 2D Canvas визуализацию данных для Web.
  • Frame-Engine — фреймворк для разработки приложений и игр.

См. также

Примечания

  1. . Дата обращения: 23 марта 2015. 30 марта 2015 года.
  2. . 27 апреля 2009 года.
  3. . Дата обращения: 23 марта 2015. 25 марта 2015 года.
  4. 19 декабря 2013 года.
  5. . Дата обращения: 7 февраля 2013. Архивировано из 11 февраля 2013 года.
  6. . Дата обращения: 7 февраля 2013. Архивировано из 11 февраля 2013 года.
  7. . Дата обращения: 7 февраля 2013. Архивировано из 11 февраля 2013 года.
  8. . Дата обращения: 7 февраля 2013. 12 марта 2013 года.
  9. . Дата обращения: 7 февраля 2013. Архивировано из 11 февраля 2013 года.
  10. . Дата обращения: 8 февраля 2013. Архивировано из 11 февраля 2013 года.
  11. . Дата обращения: 5 июля 2013. Архивировано из 7 июля 2013 года.
  12. . Дата обращения: 5 июля 2013. Архивировано из 7 июля 2013 года.
  13. . Дата обращения: 5 июля 2013. Архивировано из 7 июля 2013 года.
  14. Дата обращения: 7 февраля 2013. Архивировано из 11 февраля 2013 года.
  15. . Дата обращения: 8 февраля 2013. Архивировано из 11 февраля 2013 года.
  16. . Дата обращения: 3 ноября 2013. 3 ноября 2013 года.
  17. . Дата обращения: 3 ноября 2013. 4 ноября 2013 года.
  18. Дата обращения: 3 ноября 2013. 4 ноября 2013 года.
  19. . Дата обращения: 3 ноября 2013. 3 ноября 2013 года.

Ссылки

Примеры работы
  • . Дата обращения: 14 октября 2013. 27 сентября 2013 года.
  • . Дата обращения: 14 октября 2013. 14 февраля 2009 года.
  • . Дата обращения: 14 октября 2013. 5 октября 2013 года.
  • . Дата обращения: 14 февраля 2022. 14 февраля 2022 года.
  • . Дата обращения: 2 ноября 2013. Архивировано из 5 августа 2014 года.
Для ознакомления
  • . Дата обращения: 30 августа 2023.
  • . Дата обращения: 31 октября 2013. 31 октября 2013 года.
  • . Дата обращения: 31 октября 2013. 6 ноября 2013 года.
  • . Дата обращения: 31 октября 2013. 27 апреля 2009 года.
  • . Дата обращения: 28 мая 2016. 17 июня 2016 года.
  • . Дата обращения: 31 октября 2013. 2 ноября 2013 года.
  • . Дата обращения: 31 октября 2013. 4 ноября 2013 года.
  • . Дата обращения: 31 октября 2013. 29 октября 2013 года.
  • . Дата обращения: 31 октября 2013. 4 ноября 2013 года.
  • . Дата обращения: 31 октября 2013. 3 ноября 2013 года.
Источник —

Same as Canvas (HTML)