Среда, 17.04.2024
Мафия Клуб: Закрытый клуб
Меню сайта
Категории раздела
Техника [175]
Информационные технологии
Мини-чат
500
Наш опрос
Вы читаете наши новости
Всего ответов: 0
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2015 » Октябрь » 14 » Canvas (HTML)
20:10
Canvas (HTML)
Canvas (англ. canvas — «холст», рус. канва́с) — элемент HTML5, предназначенный для создания растрового двухмерного изображения при помощи скриптов, обычно на языке JavaScript[]. Начало отсчёта блока находится слева сверху. От него и строится каждый элемент блока[]. Размер пространства координат не обязательно отражает размер фактической отображаемой площади[]. По умолчанию его ширина равна тремстам пикселям, а высота ста пятидесяти[].

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

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

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

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

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

Ниже приводится полная документация в формате таблицы с методами или параметрами слева и описанием справа[].

Большинство библиотек использует API SVGMatrix объектов, а не этот, который остаётся, главным образом, по историческим причинам[

.width [ = value ]    Возвращает ширину холста в пикселях    canvas.width = 900px
.height [ = value ]    Возвращает высоту холста в пикселях    canvas.height = 900px

.getContext('2d')    Вернёт объект двумерного контекста. 'webgl' вернёт объект WebGLRenderingContext    var context = canvas.getContext('2d');
.probablySupportsContext( contextId )    Если .getContext() был вызван вернет false, true в противном случае    if (canvas.probablySupportsContext( contextId ))
{
    context = canvas.getContext('2d');
}
.setContext( context )    Устанавливает контекст холста    context.setContext( context )
.transferControlToProxy()    Вернёт объект, позволяющий передать управление другому документу. Выдаст исключение, если использовались .getContext() и .setContext()    context.transferControlToProxy()

.canvas()    Вернет canvas, если контекст был получен через getContext()    var canvas = context.canvas();
.commit()    Отображает кадр из буфера    context.commit();
.save()    Сохраняет текущие настройки в стек    context.save();
.restore()    Достает из стека настройки отображения канвы    context.restore();
.lineWidth [ = value ]    Возвращает текущую ширину линии    context.lineWidth = 100;
.lineCap [ = value ]    Возвращает тип начертательного пера    context.lineCap = "butt";
.lineJoin [ = value ]    Возвращает строку со стилем    context.lineJoin = "hurt"
.miterLimit [ = value ]    Толщина соединения линий    context.miterLimit = 40
.setLineDash( template )    Устанавливает шаблон штрихов линии    context.setLineDash
.getLineDash()    Возвращает установленный шаблон штрихов линии    context.lineJoin
.lineDashOffset [ = value ]    Возвращает отступ от линии    context.lineDashOffset = 4;

.font [ = value ]    Возвращает настройки шрифта, аналогично CSS правилу    context.font = "normal 16pt Sans-Serif";
.textAlign [ = value ]    Возвращает выравнивание текста    context.textAlign = "center";
.textBaseline [ = value ]    Возвращает настройки базовой линии    context.textBaseline = "top";
.direction [ = value ]    Возвращает текущее направление текста    context.direction = "ltr";
.fillText()    Рисует закрашенный текст    context.fillText()
.strokeText()    Рисует контур текста    context.strokeText()
.addText(text, styles, transform, x, y [, maxWidth ])    Рисует указанный текст    context.addText("Hello, World!", "normal 16pt Sans", svgtrans, 90, 10)
.addPathByStrokingText(text, styles, transform, x, y [, maxWidth ])    Рисует указанный текст    context.addPathByStrokingText("Hello, World!", "normal 16pt Sans", svgtrans, 90, 10)

.moveTo( x, y )    Перемещает точку в указанное место    context.moveTo(20, 20)
.beginPath()    Начать строить фигуру    context.beginPath()
.closePath()    Замкуть контур фигуры    context.closePath()
.lineTo( x, y )    Связывает две точки между собой    context.lineTo(20, 20)
.rect( x, y, width, height )    Рисует прямоугольник    context.rect(20, 20, 300, 400)
.arc( x, y, radius, startAngle, endAngle [, anticlockwise ] )    Рисует дугу - в том числе -окружность    context.arc(20, 20, 500, 0, 50)
.quadraticCurveTo( cpx, cpy, x, y )    Кривая Безье по двум точкам    context.quadraticCurveTo(20, 20, 40, 50)
.ellipse( x, y, radiusX, radiusY, rotation, startAngle, endAngle [, anticlockwise] )    Рисует эллипс    context.ellipse(20, 20, 40, 90, 9, 0, 50)
.bezierCurveTo( cp1x, cp1y, cp2x, cp2y, x, y )    Создает кривую Безье по трем точкам    context.bezierCurveTo(20, 20, 90, 90, 50, 50)
.arcTo(x1, y1, x2, y2, radiusX [, radiusY, rotation ])    Рисует дуги по контрольным точкам    context.arcTo(20, 20, 20, 20, 20)
.fillStyle [ = value ]    Указывает стиль заливки контура фигуры    context.fillStyle = "black";
.strokeStyle [ = value ]    Указывает стиль контура фигуры    context.strokeStyle = "black";
.clearRect( x, y, width, height )    Очищает прямоугольник (делает белым)    context.clearRect(20, 20, 90, 80)
.fillRect()    Рисует закрашенный прямоугольник    context.fillRect()
.strokeRect()    Рисует контур прямоугольника    context.strokeRect()
.fill()    Закрасить все фигуры    context.fill();
.stroke()    Обвести все фигуры    context.stroke();
.drawImage( img, x, y, width, height [, scaleWidth, scaleHeight] )    Нарисовать изображение    context.drawImage(img, 20, 20, 90, 90);

.addPath( path, transform )    Добавляет объект Path указанный в аргументе    context.addPath(path, transform);
.addPathByStrokingPath( path, styles, transform )    Добавляет объект Path указанный в аргументе с возможностью указание стиля отрисовки    context.addPathByStrokingPath(path, "black", transform );
.currentTransform [ = value ]    Возвращает SVG-образную матрицу трансформации    var svg = context.currentTransform;
.translate( x, y )    Сдвигает изображение    context.translate(20, 20);
.setTransform( a, b, c, d, e, f )    Изменяет изображение    context.setTransform(1, 1, 40, 40, 5, 5)
.addColorStop( offset, color )    Добавляет конечный цвет заливки градиента с указанием смещения от начала    context.addColorStop(80, "#ccc");
.createLinearGradient( x0, y0, x1, y1 )    Cоздает объект линейного градиента    context.createLinearGradient(20, 20, 40, 40);
.createRadialGradient( x0, y0, r0, x1, y1, r1 )    Cоздает объект кругового градиента    context.createRadialGradient(0, 0, 20, 40, 40, 20);
.createPattern()    Cоздает объект шаблона    var pat = context.createPattern();
.setTransform()    Устанавливает трансформацию    context.setTransform();

.measureText()    Возвращает объект с метриками текста    context.measureText();
.actualBoundingBoxLeft()    Вернет горизонтальную координату левой стороны прямоугольника занимаемого текстом    context.actualBoundingBoxLeft();
.actualBoundingBoxRight()    Вернет горизонтальную координату правой стороны прямоугольника занимаемого текстом    context.actualBoundingBoxRight();
.fontBoundingBoxAscent()    Расстояние от горизонтальной линии (TextBaseline), до вершины прямоугольника ограничивающего текст    context.fontBoundingBoxAscent();
.fontBoundingBoxDescent()    Расстояние от горизонтальной линии (TextBaseline), до низа прямоугольника ограничивающего текст    context.fontBoundingBoxDescent();
.actualBoundingBoxAscent()    Расстояние от горизонтальной линии (TextBaseline), до вершины прямоугольника ограничивающего текст    context.actualBoundingBoxAscent();
.actualBoundingBoxDescent()    Расстояние от горизонтальной линии (TextBaseline), до низа прямоугольника ограничивающего текст    context.actualBoundingBoxDescent();
.emHeightAscent()    Расстояние от горизонтальной линии (TextBaseline), до верха прямоугольника ограничивающего текст в em единицах измерения.    context.emHeightAscent();
.emHeightDescent()    Расстояние от горизонтальной линии (TextBaseline), до низа прямоугольника ограничивающего текст в em единицах измерения.    context.emHeightDescent();
.hangingBaseline()    Расстояние от горизонтальной линии (TextBaseline), до хэндинг базовой линии текста в em единицах измерения.    context.hangingBaseline();
.alphabeticBaseline()    Расстояние от горизонтальной линии (TextBaseline), до алфавитной базовой линии текста в em единицах измерения.    context.alphabeticBaseline();
.ideographicBaseline()    Расстояние от горизонтальной линии (TextBaseline), до идеографической базовой линии текста в em единицах измерения.    context.ideographicBaseline();
.drawSystemFocusRing( [ path, ] element )    Если данный элемент ориентирован, рисует кольцо фокусировки вокруг текущего пути по умолчанию или заданный путь, следуя конвенций платформы для фокус-колец.    context.drawSystemFocusRing();
.drawCustomFocusRing( [ path, ] element )        context.drawCustomFocusRing();
.scrollPathIntoView()    Позволяет управлять прокруткой    context.scrollPathIntoView();
.clip()    Ограничивает область отсечения    context.clip();
.resetClip()    Деконстатировать область отсечения    context.resetClip();
.isPointInPath()    Возвращает истину, если данная точка находится в текущем пути по умолчанию или заданного пути    context.isPointInPath();
.isPointInStroke()    Возвращает истину, если данная точка будет в регионе, охваченном инсульта текущего пути по умолчанию или заданный путь, учитывая текущий стиль инсульт.    context.isPointInStroke();
.addHitRegion()    Добавляет область хит для растрового изображения. Аргументом является объект.    context.addHitRegion();
fillRule    Правило заполнения для использования при определении, какие пиксели находятся внутри пути.    context.fillRule();
id    id canvas    context.id();
parentID    Идентификатор родительского области, для целей навигации по доступности инструментов и для курсора запасного варианта.    context.parentID();
cursor        context.cursor();
control        context.control();
label    Добавляет label для региона    context.label();
role        context.role();
.removeHitRegion()        context.removeHitRegion();

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

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

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

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

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

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

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

Использование и операции с элементом возможны только через 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
function onLoadHandler() {
  var canvas  = document.getElementById('canvas'),
      context = canvas.getContext('2d');
  /*
    Далее какие-либо действия над холстом
  */
}
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 это фреймворк для разработки приложений и игр.
Категория: Техника | Просмотров: 528 | Добавил: Admin8804 | Теги: Canvas (HTML) | Рейтинг: 0.0/0
Всего комментариев: 0
lign="center">


Вход на сайт
Поиск
Календарь
«  Октябрь 2015  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Copyright Mafiaclub.at.ua © 2024