- Операторы
- Управляющие инструкции
- JS Объекты
- браузер BOM
- HTML DOM
- События
- HTML Объекты
- Anchor
- Area
- Audio, Video
- Base
- Canvas
- addColorStop()
- arc()
- arcTo()
- beginPath()
- bezierCurveTo()
- clearRect()
- clip()
- closePath()
- createImageData()
- createLinearGradient()
- createPattern()
- createRadialGradient()
- drawImage()
- fill()
- fillRect()
- fillStyle
- fillText()
- font()
- getImageData()
- globalAlpha()
- globalCompositeOperation()
- isPointInPath()
- lineCap()
- lineJoin()
- lineTo()
- lineWidth()
- measureText()
- miterLimit()
- moveTo()
- putImageData()
- quadraticCurveTo()
- restore()
- rotate()
- save()
- scale()
- setTransform()
- shadowBlur
- shadowColor
- shadowOffsetX
- shadowOffsetY
- stroke()
- strokeRect()
- strokeStyle
- strokeText()
- textAlign()
- textBaseline()
- toDataURL()
- toBlob()
- transform()
- translate()
- Form
- IFrame
- Image
- Input
- Link
- Meta
- Option
- Progress
- Select
- Style
- Table
- Textarea
- TableHead и TableDate
- TableRow
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- Модули
- Классы
- Разное
Canvas
Объект Canvas представляет собой HTML элемент <canvas>:
<canvas id="Canvas" width="300" height="150">
<p>Ваш браузер не поддерживает рисование.</p>
</canvas>
Для того чтобы подготовить элемент <canvas> к работе, в первую очередь необходимо вызвать метод getContext(). Этот метод генерирует контекст рисования, который будет связан с указанным холстом:
var canvas = document.getElementById('Canvas'); // получаем элемент
var ctx = canvas.getContext('2d'); // получаем объект canvas
Цвета, стили и тень | |
| Свойства | |
| fillStyle | Устанавливает или возвращает цвет, градиент или шаблон, используемый при заливке фигур. |
| strokeStyle | Определяет цвет, шаблон или градиент для рисования контуров на холсте. |
| shadowColor | Устанавливает или возвращает цвет, используемый для теней |
| shadowBlur | Устанавливает или возвращает уровень размытия для теней. |
| shadowOffsetX | Определяет горизонтальное смещение тени при рисовании на холсте. |
| shadowOffsetY | Определяет вертикальное смещение тени при рисовании на холсте. |
| Методы | |
| createLinearGradient() | Создает линейный градиент. |
| createPattern() | Создает шаблон, определяющий повторяющееся изображение на холсте. |
| createRadialGradient() | Создает радиальный / круговой градиент. |
| addColorStop() | Определяет цвета и их расположение внутри градиента |
Стили линий | |
| Свойства | |
| lineCap | Устанавливает или возвращает стиль концов нарисованных линий. |
| lineJoin | Определяет способ рисования вершин. |
| lineWidth | Устанавливает или возвращает текущую ширину линии. |
| miterLimit | Определяет максимальную длину сопряжения линий. |
Четырёхугольники | |
| Методы | |
| rect() | Рисует прямоугольник на холсте. |
| fillRect() | Раскрашивает заданный прямоугольник. |
| strokeRect() | Рисует контур прямоугольника на холсте. |
| clearRect() | Удаляет указанные пиксели в пределах заданного прямоугольника. |
Контуры | |
| Методы | |
| fill() | Раскрашивает контур. |
| stroke() | Делает нарисованные контуры видимыми. |
| beginPath() | Используется для объявления начала нового пути. |
| moveTo() | Переносит точку рисования в указанное место, без создания линии. |
| closePath() | Замыкает нарисованный контур, если он еще не замкнут. |
| lineTo() | Добавляет линию в текущий контур на холсте. |
| clip() | Удаляет все, что находится вне замкнутого контура. |
| quadraticCurveTo() | Создает квадратичную кривую Безье. |
| bezierCurveTo() | Создает кубическую кривую Безье. |
| arc() | Добавляет в текущий рисунок дугу при рисовании на холсте. |
| arcTo() | Создает дугу между двумя касательными. |
| isPointInPath() | Проверяет, находится ли указанная точка на текущем пути. |
Преобразование координат | |
| Методы | |
| scale() | Масштабирует рисунок на холсте. |
| rotate() | Поворачивает холст вокруг начала координат. |
| translate() | Переносит начало координат холста в указанную точку. |
| transform() | Трансформирует объект, позволяя одновременно задать операции масштабирования, поворота и перетаскивания. |
| setTransform() | Сбрасывает текущее преобразование к единичной матрице. Затем выполняется transform(). |
Текст | |
| Свойства | |
| font | Устанавливает или возвращает шрифт, используемый при рисовании на холсте. |
| textAlign | Устанавливает или возвращает выравнивание текста по горизонтали при работе на холсте. |
| textBaseline | Устанавливает или возвращает выравнивание текста по вертикали при работе на холсте. |
| Методы | |
| fillText() | Вставляет текст на холст. |
| strokeText() | Рисует контуры символов. |
| measureText() | Возвращает объект, содержащий ширину указанного текста. |
Изображения | |
| Методы | |
| drawImage() | Копирует изображение ( или часть изображения )на холст. |
| createImageData() | Создает новый пустой объект ImageData. |
| getImageData() | Возвращает объект ImageData, представляющий базовые пиксельные данные для области холста. |
| putImageData() | Помещает на холст объект imageData. |
Compositing | |
| Свойства | |
| globalAlpha | Устанавливает или возвращает уровень прозрачности. |
| globalCompositeOperation | Определяет способ наложения одного цвета на другой при рисовании на холсте. |
Сохранение стилей и матриц преобразований | |
| Методы | |
| save() | Сохраняет состояние холста. |
| restore() | Восстанавливает последнее состояние холста, сохраненное методом save(). |
| toDataURL() | Возвращает растровое изображение холста. |
| toBlob() | Создаёт объект Blob представляющий изображение, содержащееся в canvas; этот файл может быть закеширован на диске или храниться в памяти на усмотрение пользователя. |
addColorStop()
Метод addColorStop добавляет стоп-цвет объекту градиента, созданному методом createLinearGradient или createRadialGradient.
Синтаксис
ctx.addColorStop( position, color )
Параметры
- position
- положение цвета в градиенте. Значение должно быть в диапазоне 0.0 (начало) до 1.0 (конец)
- color
- имя или код цвета, или его rgb/rgba представление
Объекту градиента можно задать сколько угодно стоп-цветов.
Пример
init('addColorStop');
var grd=ctx.createLinearGradient(0,0,299,0);
grd.addColorStop(0,"red");
grd.addColorStop(0.143,"#ffff00");
grd.addColorStop(0.286,"yellow");
grd.addColorStop(0.428,"green");
grd.addColorStop(0.571,"aqua");
grd.addColorStop(0.715,"blue");
grd.addColorStop(0.858,"#ff00ff");
grd.addColorStop(1,"red");
ctx.fillStyle=grd;
ctx.fillRect(0,0,300,250);
arc()
Метод arc рисует дугу.
Синтаксис
ctx.arc(centerX, centerY, radius, startingAngle, endingAngle, antiClockwise)
Параметры
- centerX, centerY
координаты центра дуги- radius
- величина радиуса
- startingAngle, endingAngle
начало и окончание дуги. Значения задаются в радианах- antiClockwise
- направление соединения точек начал и конца дуги: по часовой стрелки или против. По умолчанию значение равно
false— рисует по часовой стрелке. Значениеtrue- против часовой
Дуга отображается после вызова метода stroke() или fill().
Пример
init('arc');
var centerX = 150,
centerY = 90,
radius = 110,
startingAngle = 1.1 * Math.PI,
endingAngle = 1.9 * Math.PI;
ctx.beginPath();
ctx.arc(centerX, centerY, radius, startingAngle, endingAngle, true);
ctx.lineWidth = 24; // Толщина дуги
ctx.strokeStyle = "#00aaff"; // Цвет дуги
ctx.closePath();
ctx.stroke();
arcTo()
Метод arcTo создает дугу между двумя касательными на холсте.
Синтаксис
ctx.arcTo( x1,y1,x2,y2,radius ) ;
Параметры
- x1, y1
- Координаты начала дуги
- x2, y2
- Координата конца дуги
- radius
- Радиус дуги
Пример
init('arcTo');
ctx.beginPath();
ctx.moveTo(20,20);
ctx.strokeStyle = "#ff00ff";
ctx.lineWidth = 12;
ctx.lineTo(100,20);
ctx.arcTo(150,20,150,70,50);
ctx.lineTo(150,120);
ctx.stroke();
beginPath()
Метод beginPath объявляет, что начинается новый контур. Необходим когда нужно задать разные стили объектам на холсте.
Синтаксис
ctx.beginPath()
Пример
init('beginPath');
ctx.beginPath();
ctx.lineWidth="7";
ctx.strokeStyle="green";
ctx.moveTo(0,75);
ctx.lineTo(270,75);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle="purple";
ctx.moveTo(50,0);
ctx.lineTo(250,230);
ctx.stroke();
bezierCurveTo()
Метод bezierCurveTo рисует кривую Безье от текущей точки на холсте до указанной через промежуточные (контрольные) точки.
Синтаксис
ctx.bezierCurveTo(controlX1, controlY1, controlX2, controlY2, endX, endY);
Параметры
- controlX, controlY, controlX2, controlY2...
координаты контрольных точек, может быть сколько угодно- endX, endY
- координаты окончания кривой
Пример
Кривая отобразится после вызова метода stroke().
init('bezierCurveTo');
ctx.strokeStyle = "#ff7711";
ctx.lineWidth = 10;
ctx.moveTo(75,40);
ctx.bezierCurveTo(75,37,70,25,50,25);
ctx.bezierCurveTo(20,25,20,62.5,20,62.5);
ctx.bezierCurveTo(20,80,40,102,75,120);
ctx.bezierCurveTo(110,102,130,80,130,62.5);
ctx.bezierCurveTo(130,62.5,130,25,100,25);
ctx.bezierCurveTo(85,25,75,37,75,40);
ctx.stroke();
clearRect()
Метод clearRect очищает указанную область.
Синтаксис
ctx.clearRect(x,y,width,height)
Параметры
- x и y
- координаты левого верхнего угла прямоугольника
- width
- ширина прямоугольника
- height
- высота прямоугольника
Все параметры обязательны, должны быть положительными числами.
Пример
init('clearRect');
ctx.fillStyle="red";
ctx.fillRect(50,50,150,50);
ctx.fillStyle="green";
ctx.fillRect(60,100,150,50);
ctx.clearRect(100,70,50,50);
clip()
Метод clip удаляется все что находится вне указанной фигуры.
Синтаксис
ctx.clip()
Примеры
Без ctx.clip():
init('Без clip');
ctx.rect(50,20,200,120);
ctx.stroke();
ctx.fillStyle="red";
ctx.fillRect(0,0,150,100);
C ctx.clip():
init('clip');
ctx.rect(50,20,200,120);
ctx.stroke();
ctx.clip();
ctx.fillStyle="red";
ctx.fillRect(0,0,150,100);
closePath()
Метод closePath замыкает контур: последняя точка контура соединяется с первой. Текущее положение на холсте перемещается туда же. Начало контура определяется beginPath().
Синтаксис
ctx.closePath()
Пример
init('closePath');
ctx.beginPath();
ctx.moveTo(20,20);
ctx.lineTo(20,200);
ctx.lineTo(270,200);
ctx.closePath();
ctx.stroke();
ctx.fillStyle="red";
ctx.fill();
createImageData()
Метод createImageData создает объект imageData.
Синтаксис
ctx.createImageData(width, height) ctx.createImageData(OldImageData)
Параметры
- width, height
- Размеры создаваемого объекта. Результатом будет объект
imageDataс RGBA = (0,0,0,0) и размером width x height. - OldImageData
- Объект
imageDataполученный ранее с помощью getImageData или созданный с помощью createImageData
Комментарии
Чтобы установить нужные цвета в массиве используем свойство data:
imageData.data[j] = value
j— позиция в массивеimageData;value— значение для данного канала RGBA (число от 0 до 255).
На каждый пиксель отводится 4 элемента:
- imageData.data[i+0] — значение красного цвета (число от 0 до 255);
- imageData.data[i+1] — значение зеленого цвета (число от 0 до 255);
- imageData.data[i+2] — значение синего цвета (число от 0 до 255);
- imageData.data[i+3] — значение прозрачности (число от 0 до 255);
i — номер пикселя
Пример
init('createImageData');
var pixelSet = ctx.createImageData(150,150); // Черный квадрат 200 x 200 полностью прозрачный
var pixelSetLen = 4*150*150, i;
for(i=3;i<pixelSetLen;i+=4)
{ pixelSet.data[i] = 255; // далаем его не прорачным
if((i-3)%20 == 0) pixelSet.data[i-3] = 255; // каждый 5-й пиксель делаем красным
}
ctx.putImageData(pixelSet, 20,20); // выводим изображение
createLinearGradient()
Метод createLinearGradient создает объект линейного градиента.
Синтаксис
ctx.createLinearGradient(x1,y1,x2,y2)
Параметры
- x1,y1
- координаты начальной точки
- x2,y2
- координаты конечно точки
После создания объекта градиента, можно ему присвоить цвета с помощью метода addColorStop. Градиент появится на холсте после применения метода fill() или stroke().
Пример
init('createLinearGradient');
var grd=ctx.createLinearGradient(10,80,280,80);
grd.addColorStop(0.2,"red");
grd.addColorStop(0.4,"black");
grd.addColorStop(0.6,"green");
grd.addColorStop(0.8,"yellow");
ctx.fillStyle=grd;
ctx.font="bold 40px Arial";
ctx.fillText("Учим Canvas!", 10,80);
// По диагонале
var grd=ctx.createLinearGradient(50,100,250,225);
grd.addColorStop(0.2,"red");
grd.addColorStop(0.4,"black");
grd.addColorStop(0.6,"green");
grd.addColorStop(0.75,"yellow");
ctx.fillStyle=grd;
ctx.fillRect(50,100, 200,125);
createPattern()
Метод createPattern позволяет размножать изображение.
Синтаксис
ctx.createPattern(image,type)
Параметры
- image
- объект
Image - type
- строка соответствующая одному из значений: repeat, repeat-x, repeat-y и no-repeat
Результат появится на холсте после применения метода fill() или stroke().
Перед применением метода следует убедиться, что изображение загружено.
Пример
init('createPattern');
// <img src="img/lamp.jpg" id="lamp" width="32" height="32" />
var img=document.getElementById("lamp");
var pat=ctx.createPattern(img,"repeat");
ctx.rect(0,0,290,240);
ctx.fillStyle=pat;
ctx.fill();
createRadialGradient()
Метод createRadialGradient создает объект радиального градиента.
Синтаксис
ctx.createRadialGradient(x1,y1,r1,x2,y2,r2)
Параметры
- x1,y1,r1
- координаты центра и радиус первой окружности
- x2,y2,r2
- координаты центра и радиус второй окружности
После создания объекта градиента, можно ему присвоить цвета с помощью метода addColorStop. Градиент появится на холсте после применения метода fill() или stroke().
Пример
init('createRadialGradient');
var grd=ctx.createRadialGradient(150,125,10,150,125,125);
grd.addColorStop(0,"red");
grd.addColorStop(0.2,"black");
grd.addColorStop(0.3,"green");
grd.addColorStop(0.6,"yellow");
grd.addColorStop(0.8,"#00ffff");
grd.addColorStop(0.9,"#ff00ff");
ctx.fillStyle=grd;
ctx.fillRect(40,15,220,220);
drawImage()
Метод drawImage выводит изображение на хосте. Имеет несколько вариантов синтаксиса с разными назначениями.
Синтаксис
// Отображать загруженную картинку. ctx.drawImage( image, x, y ) // Масштабирование ctx.drawImage( image,x,y,width,height ) // Обрезание ctx.drawImage( image, sx, sy, sWidth, sHeight, dx, dy, width, height )
Параметры
- image
- Определяет изображение, холст, или видео элемент для использования
- x,y
- Координаты верхнего левого угла изображения
- width, height
- Размеры изображения на холсте.
- sx, sy
- Координаты верхнего левого угла слайса относительно изображения;
- sWidth, sHeight
- Размеры слайса
- dx, dy
- Координаты верхнего левого угла обрезанного изображения
- dWidth, dHeight
- Размеры обрезанного изображения на холсте
Пример
init('drawImage');
// <img id="scream" src="img/scream.jpg" alt="The Scream" width="220" height="277" />
// Поместить изображение на холсте, а также указать ширину и высоту изображения:
var img = document.getElementById("scream");
ctx.drawImage(img, 10, 10, 190, 240);
// Поместить обрезанную часть на холсте:
ctx.drawImage(img,90,130,50,60,220,100,50,60);
fill()
Метод fill делает заливку фигуры.
Синтаксис
ctx.fill()
Цвет заливки определяется свойством fillStyle. При вызове метода fill() все открытые фигуры будут закрыты автоматически, поэтому в таком случае можно не вызывать метод closePath().
Пример
init('fill');
ctx.fillStyle = "blue";
ctx.arc(150,125,100,0,2*Math.PI,false);
ctx.fill();
fillRect()
Метод fillRect заливает прямоугольную область цветом, определенный свойством fillStyle.
Синтаксис
ctx.fillRect(x,y,width,height)
Параметры
- x и y
- координаты левого верхнего угла прямоугольника
- width
- ширина прямоугольника
- height
- высота прямоугольника
Все параметры обязательны, должны быть положительными числами.
Пример
init('fillRect');
ctx.fillStyle = "#77aa77";
ctx.fillRect(50,50,200,150);
fillStyle
Свойство fillStyle определяет цвет заливки.
Синтаксис
ctx.fillStyle [ = value ]
value — имя цвета, или шестнадцатиричный код, или rgb/rgba. Если не задавать значение, тогда будет происходить чтение свойства.
По умолчанию установлено значение "#000000" (черный цвет).
Пример
init('fillStyle');
ctx.fillStyle = "#775533";
ctx.fillRect(50,50,200,150);
fillText()
Метод fillText рисует текст залитый цветом, определенным fillStyle.
Синтаксис
ctx.fillText(text, x, y [, maxWidth ] )
Параметры
- text
- текст, который будем рисовать
- x,y
- координаты верхнего левого угла текста
- maxWidth
- не обязательный параметр, если он указан и текст при необходимости будет отмасштабирован чтобы влезть в указанную ширину
Пример
init('fillText');
ctx.font = "bold 64px Tahoma";
ctx.textAlign = "start";
ctx.fillText("Учим canvas", 50, 120, 200);
font
Свойство font определяет свойства шрифта.
Синтаксис
ctx.font [ = value ]
value — перечень свойств шрифта аналогично синтаксису в CSS.
Значение по умолчанию: '10px sans-serif'.
Пример
init('font');
ctx.font = "italic bold 24px Arial";
ctx.textBaseline = "Top";
ctx.fillStyle = "blue";
ctx.fillText("Учим canvas", 20, 50);
ctx.font = "normal normal 28px Tahoma";
ctx.textAlign = "left";
ctx.strokeText("canvas оживит сайты", 10, 150);
getImageData()
Метод getImageData возвращает данные о цвете (RGB) и прозрачности указанного участка холста.
Синтаксис
ctx.getImageData(sx, sy, sw, sh)
Параметры
- sx и sy
- координаты левого верхнего угла прямоугольника
- sw
- ширина участка
- sh
- высота участка
Возвращаемое значение
Метод возвращает объект ImageData, который копирует пиксельные данные для указанного прямоугольника на холсте. Например:
var imageData = ctx.getImageData(10,10,20,20);
Получим данные в таком виде:
- imageData.data[i+0] — значение красного цвета (число от 0 до 255);
- imageData.data[i+1] — значение зеленого цвета (число от 0 до 255);
- imageData.data[i+2] — значение синего цвета (число от 0 до 255);
- imageData.data[i+3] — значение прозрачности (число от 0 до 255);
i — номер пикселя
Пример
Скопировать данные пикселя для указанного изображения на холсте, а затем инвертировать цвета и поместить данные изображения обратно на холсте с putImageData():
init('getImageData');
// <img src="img/lamp.jpg" id="lamp" width="32" height="32" />
var img=document.getElementById("lamp");
ctx.drawImage(img,10,10);
var imgData=ctx.getImageData(10,10,32,32);
// Инвертировать цвета
for (var i=0;i < imgData.data.length;i+=4)
{
imgData.data[i]=255-imgData.data[i];
imgData.data[i+1]=255-imgData.data[i+1];
imgData.data[i+2]=255-imgData.data[i+2];
imgData.data[i+3]=255;
}
ctx.putImageData(imgData,50,10);
ctx.font = '16px Arial';
ctx.fillText ('width: '+ imgData.width+' height: '+imgData.height, 100,100);
globalAlpha
Свойство globalAlpha определяет уровень прозрачности.
Синтаксис
ctx.globalAlpha [ = value ]
value — число в диапазоне от 0 до 1.0 (0 — абсолютно прозрачно, 1 - абсолютно не прозрачно).
Значение по умолчанию: 1.
Если не задавать значение, тогда будет происходить чтение свойства.
Пример
Нарисовать красный прямоугольник, затем установить прозрачность (globalAlpha) до 0,5, а затем нарисовать синий и зеленый прямоугольники:
init('globalAlpha');
ctx.fillStyle="red";
ctx.fillRect(20,20,75,50);
ctx.globalAlpha=0.2;
ctx.fillStyle="blue";
ctx.fillRect(50,50,75,50);
ctx.fillStyle="green";
ctx.fillRect(80,80,75,50);
globalCompositeOperation
Свойство globalCompositeOperation определяет как будут себя вести перекрывающиеся фигуры.
Синтаксис
ctx.globalCompositeOperation [ = type ]
type — одно из зарезервированных значений:
source-over(используется по умолчанию) — новое изображение рисуется по верх старого;destination-over— новые фигуры рисуются под уже нарисованными;source-in— отображается только та часть изображения, где фигуры пересекаются. Сверху новое изображение;destination-in— отображается только та часть изображения, где фигуры пересекаются. Сверху старое изображение;source-out— отображается только та часть нового изображения, которая не пересекается с другими фигурами;destination-out— отображается только та часть предшествующего изображения, которая не пересекается с другими фигурами;source-atop— у нового изображения отображается только та часть, которая пересекается с предшествующими фигурами;destination-atop— у предшествующего изображения отображается (поверх) только та часть, которая пересекается с новой фигурой;lighter— место пересечения фигур изменяет цвет на тот, которые получается путем сложения цветов пересекающихся фигур;darker— место пересечения фигур изменяет цвет на тот, которые получается путем вычитания цветов пересекающихся фигур;xor— место пересечения фигур прозрачно;copy— отображается только новая фигура, все остальное удаляется.
Пример
init('globalCompositeOperation');
ctx.fillStyle="red";
ctx.fillRect(20,20,75,50);
ctx.globalCompositeOperation="source-over";
ctx.fillStyle="blue";
ctx.fillRect(50,50,75,50);
ctx.fillStyle="red";
ctx.fillRect(150,20,75,50);
ctx.globalCompositeOperation="destination-over";
ctx.fillStyle="blue";
ctx.fillRect(180,50,75,50);
ctx.fillStyle="red";
ctx.fillRect(20,120,75,50);
ctx.globalCompositeOperation="lighter";
ctx.fillStyle="blue";
ctx.fillRect(50,150,75,50);
ctx.fillStyle="red";
ctx.fillRect(150,120,75,50);
ctx.globalCompositeOperation="xor";
ctx.fillStyle="blue";
ctx.fillRect(180,150,75,50);
isPointInPath()
Метод isPointInPath возвращает true, если указанная точка находится внутри контура, и false — если вне его.
Синтаксис
ctx.isPointInPath(x, y)
Параметры
- x, y
- Координаты точки, которую проверяем на попадение в контур.
Пример
init('isPointInPath');
ctx.beginPath();
ctx.rect(50,50,100,50);
ctx.fill();
ctx.closePath();
var isPath = ctx.isPointInPath(50,50); // return true
var isPath2 = ctx.isPointInPath(1,1); // return false
ctx.font = "14px Arial"
ctx.fillText ("isPath = " + isPath + ", isPath2 = " + isPath2, 20,120 );
lineCap
Свойство lineCap определяет оформление концов линий.
Синтаксис
ctx.lineCap [ = value ]
Доступны три значения:
butt— концы линий прямые (по умолчанию).round— концы линий скругленные.square— концы линий прямые, но к ней с обоих концов добавляется поле с шириной равной толщине линии и высотой равной половине от толщины линии.
Комментарии
При использовании значений round или squre, фактическая длина линии увеличивается на значение lineWidth (с двух сторон линии добавляются отрезки длинной lineWidth/2).
Пример
init('lineCap');
// butt line cap (верхняя линия)
ctx.beginPath();
ctx.lineWidth = 40;
ctx.lineCap = "butt";
ctx.strokeStyle = "#0000ff";
ctx.moveTo(40, 70);
ctx.lineTo(260, 70);
ctx.stroke();
// round line cap (средняя линия)
ctx.beginPath();
ctx.strokeStyle = "#00ff00";
ctx.lineCap = "round";
ctx.moveTo(40, 112);
ctx.lineTo(260, 112);
ctx.stroke();
// square line cap (нижняя линия)
ctx.beginPath();
ctx.strokeStyle = "#ff0000";
ctx.lineCap = "square";
ctx.moveTo(40, 154);
ctx.lineTo(260, 154);
ctx.stroke();
lineJoin
Свойство lineJoin определяет оформление соединений линий.
Синтаксис
ctx.lineJoin [ = value ]
Доступны три значения:
miter- острый угол (по умолчанию);round- скругленный угол;bevel- плоский угол.
Пример
init('lineJoin');
var lineJoin = ['round','bevel','miter'];
var color = ['#0077aa', '#77aa77', '#aa7700'];
ctx.lineWidth = 25;
for (var i=0;i < lineJoin.length;i++){
ctx.lineJoin = lineJoin[i];
ctx.beginPath();
ctx.strokeStyle=color[i];
ctx.moveTo(0,20+i*75);
ctx.lineTo(50,80+i*75);
ctx.lineTo(100,20+i*75);
ctx.lineTo(150,80+i*75);
ctx.lineTo(200,20+i*75);
ctx.lineTo(250,80+i*75);
ctx.lineTo(300,20+i*75);
ctx.stroke();
}
lineTo()
Метод lineTo рисует линию от текущего положения на холсте до точки (x, y). По этим координатам так же будет новое текущее положение на холсте.
Синтаксис
ctx.lineTo(x,y)
Параметры обязательны.
Пример
init('lineTo');
ctx.beginPath();
ctx.moveTo(20,20);
ctx.lineTo(20,130);
ctx.lineTo(230,130);
ctx.lineTo(150,100);
ctx.lineWidth = 20;
ctx.stroke();
lineWidth
Свойство lineWidth определяет толщину линий.
Синтаксис
ctx.lineWidth [ = value ]
value — положительное число в пикселях. Если не задавать значение, тогда будет происходить чтение свойства.
Значение по умолчанию: 1.
Пример
init('lineWidth');
ctx.beginPath();
ctx.moveTo(50, 220);
ctx.strokeStyle="#aa7700"
ctx.lineTo(250, 50);
ctx.lineWidth = 40;
ctx.stroke();
measureText()
Метод measureText возвращает объект, содержащий ширину указанного текста в пикселях.
Синтаксис
ctx.measureText( text ).width
Параметры
- text
- Текст, который будет измеряться
init('measureText');
ctx.font="bold 48px Arial";
ctx.fillStyle="#ffaa00";
var txt="Hello World";
ctx.fillText(txt,10,120);
var w = ctx.measureText(txt).width;
ctx.font="24px Arial";
ctx.fillStyle="#117711";
ctx.fillText("width:" + w,10,50);
miterLimit
Саойство miterLimit устанавливает или возвращает максимально допустимое расстояние для "дорисовки".
Свойство miterLimit работает только если свойство lineJoin имеет значение "miter".
При соединении линий с опцией miter, концы линий продлеваются на определенное расстояние чтобы соединиться. Это расстояние будет небольшим для больших углов и в разы больше для острых.
Синтаксис
ctx.miterLimit [ = value ]
value — число не менее 1.0 (значение меньше будет восприниматься как 1.0).
Значение по умолчанию: 10,0
Значение 1.0 означает отсутствие удлинения.
Пример
init('miterLimit');
// miterLimit=1
ctx.miterLimit=1;
ctx.beginPath();
ctx.moveTo(0,50);
ctx.lineWidth=7;
for (i=0;i < 27;i++){
var dy = i%2==0 ? 75 : 25 ;
ctx.lineTo(Math.pow(i,1.5)*2,dy); }
ctx.stroke();
// miterLimit=10
ctx.miterLimit=10;
ctx.beginPath();
ctx.moveTo(0,150);
ctx.strokeStyle="#003377";
for (i=0;i < 27;i++){
var dy = i%2==0 ? 175 : 125 ;
ctx.lineTo(Math.pow(i,1.5)*2,dy); }
ctx.stroke();
moveTo()
Метод moveTo перемещает текущие положение на холсте к координатам (x, y).
Синтаксис
ctx.moveTo(x,y)
Параметры обязательны.
Пример
init('moveTo');
ctx.beginPath();
ctx.moveTo(0,0);
ctx.lineTo(300,250);
ctx.stroke();
putImageData()
Метод putImageData помещает на холст объект imageData (содержит RGBA информацию).
Синтаксис
ctx.putImageData(imageData, x, y [, dX, dY, dWidth, dHeight])
Параметры
- imageData
- объект, созданный с помощью метода createImageData() или полученный с помощью getImageData()
- x и y
- координаты левого верхнего угла размещаемого на холсте объекта относительно холста
- dX, dY
- координаты левого верхнего угла относительно изображения в
imageData, от которого будут рассчитываться размеры изображения - dWidth, dHeight
- размеры размещаемого объекта (обрезается часть изображения, которая не вмещается в эти размеры)
Пример
init('putImageData');
ctx.fillStyle = "red";
ctx.fillRect(10,10,150,70);
ctx.fillStyle = "green";
ctx.globalAlpha = "0.5";
ctx.fillRect(120,50,70,70);
var Pixel1 = ctx.getImageData(10,10,180,110);
ctx.putImageData(Pixel1,100,100,110,40,70,70); // отображаем только зеленый квадрат
quadraticCurveTo()
Метод quadraticCurveTo рисует кривую Безье второго порядка от текущей точки на холсте до указанной через промежуточную (контрольную).
Синтаксис
ctx.quadraticCurveTo(controlX, controlY, endX, endY)
Параметры
- controlX, controlY
- координаты контрольной точки
- endX, endY
- координаты окончания кривой
Дуга отобразится после вызова метода stroke(). Цвет дуги определяет свойство strokeStyle, толщину линии — lineWidth. Текущее положение на холсте переместится в конец кривой.
Пример
init('quadraticCurveTo');
ctx.moveTo(75,25);
ctx.lineWidth=3;
ctx.strokeStyle="blue";
ctx.quadraticCurveTo(25,25,25,100,50,120,30,125);
ctx.quadraticCurveTo(25,100,50,100);
ctx.quadraticCurveTo(50,120,30,125);
ctx.quadraticCurveTo(60,120,65,100);
ctx.quadraticCurveTo(125,100,125,62.5);
ctx.quadraticCurveTo(125,25,75,25);
ctx.stroke();
restore()
Метод restore извлекает из стека состояние канвы. При этом извлекаются:
- примененные трансформации;
- значения свойств: strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation
- контуры отсечения.
Синтаксис
ctx.restore()
Применяется в паре с методом save().
Пример
init('restore');
ctx.fillStyle = "red";
ctx.save();
ctx.fillRect(50,50,30,20);
ctx.fillStyle = "green";
ctx.save();
ctx.fillRect(80,50,30,20);
ctx.fillStyle = "blue";
ctx.fillRect(110,50,30,20);
ctx.restore();
ctx.fillRect(140,50,30,20);
ctx.restore();
ctx.fillRect(170,50,30,20);
rotate()
Метод rotate поворачивает полотно на заданный угол вокруг точки начала координат.
Синтаксис
ctx.rotate(angle)
Параметры
- angle
- Угол поворота в радианах.
Пример
init('rotate');
var color = ["aqua", "black", "blue", "fuchsia", "gray",
"green", "lime ", "maroon", "navy", "olive",
"orange", "purple ", "red", "teal", "yellow"]
ctx.translate(180, 125);
for(var i = 0; i < 15; i++) {
ctx.beginPath();
ctx.fillStyle=color[i];
ctx.arc(0, 10 + 10 * i, 5 + i * 2, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
ctx.rotate(Math.PI / 5); }
save()
Метод save сохраняет (помещает в стек) состояние канвы. При этом сохраняются:
- примененные трансформации;
- значения свойств: strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, globalCompositeOperation
- контуры отсечения.
Синтаксис
ctx.save()
Применяется в паре с методом restore().
Пример
init('save');
ctx.fillStyle = "red";
ctx.save();
ctx.fillRect(50,50,30,20);
ctx.fillStyle = "green";
ctx.save();
ctx.fillRect(80,50,30,20);
ctx.fillStyle = "blue";
ctx.fillRect(110,50,30,20);
ctx.restore();
ctx.fillRect(140,50,30,20);
ctx.restore();
ctx.fillRect(170,50,30,20);
scale()
Метод scale масштабирует единицы измерения холста.
Синтаксис
ctx.scale(kx, ky)
Параметры
- kx, ky
- Коэффициенты масштаба по осям
XиY.
Коэффициенты — любые действительные числа: числа больше 1.0 — увеличиваем масштаб, меньше 1, но больше 0 — уменьшаем. Значение 1.0 — масштаб остается без изменений.
По умолчанию единица измерения холста равна одному пикселю. Если мы применим коэффициент 0.5, тогда единица измерения уменьшится вдвое и соответственно изображение так же уменьшится.
Так же допускается использование отрицательных значений, с помощью которых можно добиться зеркальных отображений. Например, применив scale(1;-1), получим зеркальное отражение по оси Y.
Пример
init('scale');
ctx.fillRect(100,100,190,100);
ctx.scale(0.33,0.33); // уменьшаем в 3 раза
ctx.fillStyle="#77aa77";
ctx.fillRect(100,100,190,100);
setTransform()
Метод setTransform делает сброс матрицы преобразования к единичной матрице, а затем вызывается метод transform с параметрами указанными в setTransform.
Другими словами, метод setTransform() позволяет масштабировать, вращать, перемещать и искажать текущий контекст.
Синтаксис
ctx.setTransform(m11, m12, m21, m22, dx, dy);
Параметры
- dx, dy
- Повторяют метод translate, смещая картинку на соответствующие значения.
- m11, m22
- Повторяют метод scale.
- m12, m21
- Каждый пиксель (x,y) смещается на y*m21 пикселей вправо и на x*m12 пикселей вниз. Это значит, что при m21=1 каждая следующая строчка будет смещена на 1 пиксель вправо, относительно предыдущей.
Пример
init('setTransform');
var a = 100, b = 50, x = 160, y = 25;
ctx.globalAlpha = 0.4;
ctx.fillStyle = 'red';
ctx.setTransform(1, 1.5, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
ctx.fillStyle = 'green';
ctx.setTransform(1, 1, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
ctx.fillStyle = 'blue';
ctx.setTransform(1, 0.5, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
ctx.fillStyle = 'red';
ctx.setTransform(-1, 1.5, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
ctx.fillStyle = 'green';
ctx.setTransform(-1, 1, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
ctx.fillStyle = 'blue';
ctx.setTransform(-1, 0.5, 0, 1, x, y);
ctx.fillRect(0, 0, a, b);
shadowBlur
Свойство shadowBlur устанавливает или возвращает уровень размытия для теней.
Синтаксис
ctx.shadowBlur [ = value ]
value - уровень размытия для тени.
Значение по умолчанию: 0.
Пример
init('shadowBlur');
ctx.shadowBlur=30;
ctx.shadowColor="black";
ctx.fillStyle="red";
ctx.fillRect(50,50,200,150);
shadowColor
Свойство shadowColor задает цвет тени.
Синтаксис
ctx.shadowColor [ = value ]
Значением может быть имя цвета, шестнадцатеричный код, rgb/rgba представление.
Значение по умолчанию: "#000000".
Пример
init('shadowColor');
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 8;
ctx.shadowBlur = 8;
ctx.shadowColor = "rgba(0, 0, 0, 0.5)";
ctx.fillStyle = "green";
ctx.fillRect(50,50,200,150);
shadowOffsetX
Свойство shadowOffsetX задает смещение тени относительно объекта по оси X в пикселах.
Синтаксис
ctx.shadowOffsetX [ = value ]
По умолчанию смещение равно 0.
Положительные значения смещают тень вправо, отрицательные — влево.
Пример
init('shadowOffsetX');
ctx.shadowOffsetX = 15;
ctx.shadowOffsetY = 8;
ctx.shadowBlur = 8;
ctx.shadowColor = "rgba(0, 0, 0, 0.5)";
ctx.fillStyle = "green";
ctx.fillRect(50,25,200,150);
shadowOffsetY
Свойство shadowOffsetY задает смещение тени относительно объекта по оси Y в пикселах.
Синтаксис
ctx.shadowOffsetY [= value]
По умолчанию смещение равно 0.
Положительные значения смещают тень вниз, отрицательные — вверх.
Пример
init('shadowOffsetY');
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 15;
ctx.shadowBlur = 8;
ctx.shadowColor = "rgba(0, 0, 0, 0.5)";
ctx.fillStyle = "blue";
ctx.fillRect(50,25,200,150);
stroke()
Метод stroke делает нарисованные контуры видимыми.
Синтаксис
ctx.stroke()
Пример
init('stroke');
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(50,150);
ctx.lineTo(200,150);
ctx.stroke();
strokeRect()
Метод strokeRect рисует контур прямоугольника цветом, определенный свойством strokeStyle.
Синтаксис
ctx.strokeRect(x, y, width, height)
Параметры
- x и y
- координаты левого верхнего угла прямоугольника
- width
- ширина прямоугольника
- height
- высота прямоугольника
Все параметры обязательны, должны быть положительными числами.
Пример
init('strokeRect');
ctx.beginPath();
ctx.strokeStyle = "#77aa33";
ctx.lineWidth = 20;
ctx.strokeRect(50,50,200,150);
strokeStyle
Свойство strokeStyle oпределяет цвет линий.
Синтаксис
ctx.strokeStyle [ = value ]
value — имя цвета, или шестнадцатиричный код, или rgb/rgba. Если не задавать значение, тогда будет происходить чтение свойства.
По умолчанию установлено значение "#000000" (черный цвет).
Пример
init('strokeStyle');
ctx.beginPath();
ctx.moveTo(0, 250);
ctx.lineTo(300, 0);
ctx.strokeStyle = "#ff0000";
ctx.lineWidth=5;
ctx.stroke();
strokeText()
Метод strokeText рисует контур текста цветом, определенным strokeStyle.
Синтаксис
ctx.strokeText(text, x, y [, maxWidth ] )
Параметры
- text
- Текст, который будем рисовать
- x,y
- Координаты верхнего левого угла текста
- maxWidth
- Не обязательный параметр, если он указан и текст при необходимости будет отмасштабирован чтобы влезть в указанную ширину
Пример
init('strokeText');
ctx.font = "normal normal 48px Tahoma";
ctx.strokeStyle = "#115599";
ctx.strokeText("Учим canvas", 5, 100);
textAlign
Свойство textAlign определяет выравнивание текста.
Синтаксис
ctx.textAlign [ = value ]
value — один из следующих вариантов:
start— значение по умолчанию, текст начинается с указанной позиции;end— текст завершается до указанной позиции;left— текст начинается с указанной позиции;right— текст завершается до указанной позиции;center— текст располагается по центру относительно указанной позиции.
Выравнивание происходит относительно указанных координат начала текста.
Значение start / left и right/ end совпадут когда к у нас направление текста ltr. И наоборот, start / right и left / end совпадут для rtl.
Пример
init('textAlign');
ctx.font = "italic bold 24px Arial";
ctx.textalign = "end";
ctx.fillStyle = "blue";
ctx.fillText("Учим canvas", 100, 150);
ctx.font = "normal normal 24px Tahoma";
ctx.textAlign = "center";
ctx.strokeText("canvas оживит сайты", 150, 60);
textBaseline
Свойство textBaseline возвращает / устанавливает выравнивание базовой линии.
Синтаксис
ctx.textBaseline [ = value ]
value — один из следующих вариантов (чтение и запись):
top- выравнивание относительно верхней точки базовой линии.middle- выравнивание относительно середины базовой линии.bottom- выравнивание относительно нижнего края базовой линии.alphabetic(по умолчанию) - выравнивание относительно линии alphabetichanging- выравнивание относительно линии hangingideographic- выравнивание относительно линии ideographic
Пример
init('textBaseline');
ctx.strokeStyle="red";
ctx.moveTo(0,100);
ctx.lineTo(299,100);
ctx.stroke();
ctx.font="16px Arial";
ctx.textBaseline="top";
ctx.fillText("Top",0,100);
ctx.textBaseline="bottom";
ctx.fillText("Bottom",35,100);
ctx.textBaseline="middle";
ctx.fillText("Middle",95,100);
ctx.textBaseline="alphabetic";
ctx.fillText("Alphabetic",150,100);
ctx.textBaseline="hanging";
ctx.fillText("Hanging",230,100);
toDataURL()
Метод toDataURL сохраняет в строку формата data:url изображение нарисованное на холсте.
Синтаксис
canvas.toDataURL( type, [quality] )
Параметры
- type
- Не обязательный. Строка с MIME-типом. По умолчанию "image/png"
- quality
- Не обязательный. Числовое значение от 0 до 1 показывающее качество сохраняемой картинки.
Возвращаемое значение
Строка в виде URL-адреса "data:", закодированую через base64.
Комментарии
Метод toDataURL() должен применяться к объекту canvas, а не к ctx.
Пример
init('toDataURL');
ctx.fillRect(10,10,20,20);
ctx.fillStyle = "green";
ctx.fillRect(40,40,20,20);
var scrImg = canvas.toDataURL("image/jpeg");
ctx.font="11px Arial";
ctx.fillStyle = "black";
ctx.fillText(scrImg.substr(0,40),5,100);
ctx.fillText(scrImg.substr(40,40),5,120);
ctx.fillText(scrImg.substr(80,40),5,140);
ctx.fillText(scrImg.substr(120,40),5,160);
ctx.fillText(scrImg.substr(160,40),5,180);
ctx.fillText(scrImg.substr(200,40),5,200);
ctx.fillText(scrImg.substr(240,20)+' . . .',5,220);
toBlob()
Метод toBlob Создаёт объект Blob представляющий изображение, содержащееся в canvas; этот файл может быть закеширован на диске или храниться в памяти на усмотрение пользователя.
Синтаксис
canvas.toBlob(callback, mimeType, qualityArgument)
Параметры
- callback
- Callback-функция с результирующим объектом
Blobв качестве единственного аргумента. - mimeType
- Аргумент определяющий формат изображения. По умолчанию
image/png. - qualityArgument
Аргумент типа Numberсо значением от0до1, определяющий качество изображения, если заявлен MIME-типimage/jpegилиimage/webp. Если этот аргумент содержит нечто иное, для определения качества изображения будет использовано значение по умолчанию. Остальные аргументы проигнорируются.
Возвращаемое значение
Не возвращает ничего.
Пример
<img src="" alt="" width=200 height=200 /><div id="comm" style="display:none">Картинка сохранена как «example.png»</div>
<script>
// берём любое изображение
let img = document.querySelector('img');
// создаём <canvas> того же размера
let canvas = document.createElement('canvas');
canvas.width = img.clientWidth;
canvas.height = img.clientHeight;
var d=canvas.width;
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(d / 2, 0);
ctx.lineTo(d, d);
ctx.lineTo(0, d);
ctx.closePath();
ctx.fillStyle = 'green';
ctx.fill()
// toBlob является асинхронной операцией, для которой callback-функция вызывается при завершении
canvas.toBlob(function(blob) {
// после того, как Blob создан, загружаем его
let link = document.createElement('a');
link.download = 'example.png';
link.href = URL.createObjectURL(blob);
img.src=link.href; document.getElementById("comm").style.display="block";
link.click();
// удаляем внутреннюю ссылку на Blob, что позволит браузеру очистить память
URL.revokeObjectURL(link.href);
}, 'image/png');
</script>transform()
Метод transform применяет нестандартную матрицу преобразования.
Метод transform действует точно также как setTransform, но в отличии от последнего не обнуляет каждый раз предыдущую трансформацию, а накладывается поверх неё.
Синтаксис
ctx.transform (m11, m12, m21, m22, dx, dy);
Параметры
- dx, dy
- Повторяют метод translate, смещая картинку на соответствующие значения.
- m11, m22
- Повторяют метод scale, изменяя размер отрысовываемых пикселей.
- m12, m21
- Каждый пиксель (x,y) смещается на y*m21 пикселей вправо и на x*m12 пикселей вниз. Это значит, что при m21=1 каждая следующая строчка будет смещена на 1 пиксель вправо, относительно предыдущей.
Пример
init('transform');
ctx.fillStyle="yellow";
ctx.fillRect(0,0,250,100)
ctx.transform(1,0.5,-0.5,1,30,10);
ctx.fillStyle="red";
ctx.fillRect(0,0,250,100);
ctx.transform(1,0.5,-0.5,1,30,10);
ctx.fillStyle="blue";
ctx.fillRect(0,0,250,100);
translate
translate Перемещает канву и начало координат в новое место.
Синтаксис
ctx.translate(x, y)
Параметры
- x
- расстояние, на которое переносим полотно по оси X
- y
- расстояние, на которое переносим полотно по оси Y
Примеры
init('translate');
ctx.fillStyle = "red";
ctx.fillRect(10,10,100,100);
ctx.translate(180,130);
ctx.fillStyle = "blue";
ctx.fillRect(10,10,100,100);
Крутой пример
<canvas width="600" height="450" id="Canvas"></canvas>
<script>
var canvas = document.getElementById('Canvas'); // получаем элемент
var ctx = canvas.getContext('2d'); // получаем объект canvas
var lastX = canvas.width * Math.random();
var lastY = canvas.height * Math.random();
var hue = 0;
function line() {
ctx.save();
ctx.translate(canvas.width/2, canvas.height/2);
ctx.scale(0.9, 0.9);
ctx.translate(-canvas.width/2, -canvas.height/2);
ctx.beginPath();
ctx.lineWidth = 5 + Math.random() * 10;
ctx.moveTo(lastX, lastY);
lastX = canvas.width * Math.random();
lastY = canvas.height * Math.random();
ctx.bezierCurveTo(canvas.width * Math.random(),
canvas.height * Math.random(),
canvas.width * Math.random(),
canvas.height * Math.random(),
lastX, lastY);
hue = hue + 10 * Math.random();
ctx.strokeStyle = 'hsl(' + hue + ', 50%, 50%)';
ctx.shadowColor = 'white';
ctx.shadowBlur = 10;
ctx.stroke();
ctx.restore(); }
setInterval(line, 50);
function blank() {
ctx.fillStyle = 'rgba(0,0,0,0.1)';
ctx.fillRect(0, 0, canvas.width, canvas.height); }
setInterval(blank, 40);
</script>