OffscreenCanvasRenderingContext2D
Baseline 2023 *
Новое
С марта 2023 года эта функция работает на последних устройствах и версиях браузеров. Возможно, эта функция не будет работать на более старых устройствах или браузерах.
* Некоторые части этой функции могут иметь разный уровень поддержки.
Примечание: Эта функция доступна в Потоках выполнения JavaScript.
Интерфейс OffscreenCanvasRenderingContext2D — это контекст отрисовки CanvasRenderingContext2D для рисования на растровом изображении объекта OffscreenCanvas. Он похож на объект CanvasRenderingContext2D, с следующими отличиями:
- нет поддержки функций пользовательского интерфейса (
drawFocusIfNeeded) - атрибут
canvasссылается на объектOffscreenCanvasвместо элемента<canvas> - растровое изображение для элемента-заполнителя
<canvas>, принадлежащего объектуOffscreenCanvas, обновляется во время обновления отрисовки потока выполненияWindowилиWorker, которому принадлежитOffscreenCanvas
Пример
Следующий фрагмент кода создает объект Worker с помощью конструктора Worker(). Метод transferControlToOffscreen() используется для получения объекта OffscreenCanvas из элемента <canvas>, чтобы он мог быть передан в поток выполнения:
const canvas = document.getElementById("canvas");
const offscreen = canvas.transferControlToOffscreen();
const worker = new Worker("worker.js");
worker.postMessage({ canvas: offscreen }, [offscreen]);
В потоке выполнения мы можем использовать OffscreenCanvasRenderingContext2D для рисования на растровом изображении объекта OffscreenCanvas:
onmessage = (event) => {
const canvas = event.data.canvas;
const offCtx = canvas.getContext("2d");
// draw to the offscreen canvas context
offCtx.fillStyle = "red";
offCtx.fillRect(0, 0, 100, 100);
};
Для получения полного примера обратитесь к нашему примеру потока выполнения OffscreenCanvas на GitHub (запустить пример потока выполнения OffscreenCanvas).
Дополнительные методы
Следующий метод является новым для интерфейса OffscreenCanvasRenderingContext2D и отсутствует в интерфейсе CanvasRenderingContext2D:
Неподдерживаемые функции
Следующий метод пользовательского интерфейса не поддерживается интерфейсом OffscreenCanvasRenderingContext2D:
CanvasRenderingContext2D.drawFocusIfNeeded()-
Если заданный элемент имеет фокус, этот метод рисует фокусную рамку вокруг текущей траектории.
Наследованные свойства и методы
Следующие свойства и методы унаследованы от CanvasRenderingContext2D. Они используются так же, как и в CanvasRenderingContext2D
Контекст
CanvasRenderingContext2D.isContextLost()-
Возвращает
true, если контекст отрисовки был утерян.
Рисование прямоугольников
CanvasRenderingContext2D.clearRect()-
Задает все пиксели в прямоугольнике, определенном начальной точкой (x, y) и размером (ширина, высота), на прозрачный черный цвет, стирает ранее нарисованное содержимое.
CanvasRenderingContext2D.fillRect()-
Рисует заполненный прямоугольник в позиции (x, y), размер которого определяется значениями ширина и высота.
CanvasRenderingContext2D.strokeRect()-
Рисует прямоугольник с начальной точкой в (x, y), шириной w и высотой h на холсте, используя текущий стиль обводки.
Рисование текста
Следующие методы и свойства управляют рисованием текста. См. также объект TextMetrics для свойств текста.
CanvasRenderingContext2D.fillText()-
Рисует (заливает) заданный текст в заданной позиции (x, y).
CanvasRenderingContext2D.strokeText()-
Рисует (обводит) заданный текст в заданной позиции (x, y).
CanvasRenderingContext2D.measureText()-
Возвращает объект
TextMetrics. CanvasRenderingContext2D.textRendering-
Отрисовка текста. Возможные значения:
auto(по умолчанию),optimizeSpeed,optimizeLegibility,
Стили линий
Следующие методы и свойства управляют тем, как рисуются линии.
CanvasRenderingContext2D.lineWidth-
Ширина линий. По умолчанию
1.0. CanvasRenderingContext2D.lineCap-
Тип окончаний линий. Возможные значения:
butt(по умолчанию),round,square. CanvasRenderingContext2D.lineJoin-
Определяет тип углов, где встречаются две линии. Возможные значения:
round,bevel,miter(по умолчанию). CanvasRenderingContext2D.miterLimit-
Коэффициент ограничения скругления. По умолчанию
10. CanvasRenderingContext2D.getLineDash()-
Возвращает текущий массив шаблонов пунктирной линии, содержащий четное число неотрицательных чисел.
CanvasRenderingContext2D.setLineDash()-
Устанавливает текущий шаблон пунктирной линии.
CanvasRenderingContext2D.lineDashOffset-
Указывает, где начать массив штрихов на линии.
Стили текста
Следующие свойства управляют тем, как выводится текст.
CanvasRenderingContext2D.font-
Настройка шрифта. Значение по умолчанию
10px sans-serif. CanvasRenderingContext2D.textAlign-
Настройка выравнивания текста. Возможные значения:
start(по умолчанию),end,left,right,center. CanvasRenderingContext2D.textBaseline-
Настройка выравнивания базовой линии. Возможные значения:
top,hanging,middle,alphabetic(по умолчанию),ideographic,bottom. CanvasRenderingContext2D.direction-
Направление. Возможные значения:
ltr,rtl,inherit(по умолчанию). CanvasRenderingContext2D.letterSpacing-
Межбуквенное расстояние. По умолчанию:
0px. CanvasRenderingContext2D.fontKerning-
Керинг шрифта. Возможные значения:
auto(по умолчанию),normal,none. CanvasRenderingContext2D.fontStretch-
Растяжение шрифта. Возможные значения:
ultra-condensed,extra-condensed,condensed,semi-condensed,normal(по умолчанию),semi-expanded,expanded,extra-expanded,ultra-expanded. CanvasRenderingContext2D.fontVariantCaps-
Вариант шрифта с заглавными буквами. Возможные значения:
normal(по умолчанию),small-caps,all-small-caps,petite-caps,all-petite-caps,unicase,titling-caps. -
CanvasRenderingContext2D.textRenderingЭкспериментальный -
Отображение текста. Возможные значения:
auto(по умолчанию),optimizeSpeed,optimizeLegibility,geometricPrecision. CanvasRenderingContext2D.wordSpacing-
Межсловное расстояние. Значение по умолчанию:
0px
Стили заливки и обводки
Стиль заливки используется для цветов и стилей внутри фигур, а стиль обводки — для линий вокруг фигур.
CanvasRenderingContext2D.fillStyle-
Цвет или стиль, используемый внутри фигур. По умолчанию
#000(чёрный). CanvasRenderingContext2D.strokeStyle-
Цвет или стиль, используемый для линий вокруг фигур. По умолчанию
#000(чёрный).
Градиенты и узоры
CanvasRenderingContext2D.createConicGradient()-
Создаёт конический градиент вокруг точки, заданной координатами в параметрах.
CanvasRenderingContext2D.createLinearGradient()-
Создаёт линейный градиент вдоль линии, заданной координатами в параметрах.
CanvasRenderingContext2D.createRadialGradient()-
Создаёт радиальный градиент, заданный координатами двух окружностей в параметрах.
CanvasRenderingContext2D.createPattern()-
Создаёт узор, используя указанное изображение. Он повторяет источник в направлениях, указанных в аргументе повторения. Этот метод возвращает
CanvasPattern.
Тени
CanvasRenderingContext2D.shadowBlur-
Указывает эффект размытия. По умолчанию:
0. CanvasRenderingContext2D.shadowColor-
Цвет тени. По умолчанию: полностью прозрачный чёрный.
CanvasRenderingContext2D.shadowOffsetX-
Горизонтальное смещение тени. По умолчанию:
0. CanvasRenderingContext2D.shadowOffsetY-
Вертикальное смещение тени. По умолчанию:
0.
Контуры
Следующие методы могут использоваться для управления контурами объектов.
CanvasRenderingContext2D.beginPath()-
Начинает новый контур, очищая список подконтуров. Вызовите этот метод, когда необходимо создать новый контур.
CanvasRenderingContext2D.closePath()-
Перемещает точку пера обратно к началу текущего подконтура. Попытка провести прямую линию от текущей точки к началу. Если фигура уже закрыта или имеет только одну точку, эта функция ничего не делает.
CanvasRenderingContext2D.moveTo()-
Перемещает начальную точку нового подконтура в координаты (x, y).
CanvasRenderingContext2D.lineTo()-
Соединяет последнюю точку в текущем подконтуре с заданными координатами (x, y) прямой линией.
CanvasRenderingContext2D.bezierCurveTo()-
Добавляет кубическую кривую Безье к текущему контуру.
CanvasRenderingContext2D.quadraticCurveTo()-
Добавляет квадратичную кривую Безье к текущему контуру.
CanvasRenderingContext2D.arc()-
Добавляет дугу окружности к текущему контуру.
CanvasRenderingContext2D.arcTo()-
Добавляет дугу к текущему контуру с заданными контрольными точками и радиусом, соединённую с предыдущей точкой прямой линией.
CanvasRenderingContext2D.ellipse()-
Добавляет эллиптическую дугу к текущему контуру.
CanvasRenderingContext2D.rect()-
Создаёт контур прямоугольника в позиции (x, y) с размером, определяемым значениями width и height.
CanvasRenderingContext2D.roundRect()-
Создаёт контур прямоугольника с закруглёнными углами в позиции (x, y) с размером, определяемым значениями width и height, и радиусами, определяемыми значением radii.
Отрисовка контуров
CanvasRenderingContext2D.fill()-
Заливает текущие подконтуры текущим стилем заливки.
CanvasRenderingContext2D.stroke()-
Отображает текущие подконтуры текущим стилем обводки.
CanvasRenderingContext2D.clip()-
Создаёт область обрезки из текущих подконтуров. Всё, что нарисовано после вызова
clip(), отображается только внутри области обрезки. Пример см. в руководстве по Canvas — Области обрезки. CanvasRenderingContext2D.isPointInPath()-
Указывает, содержится ли заданная точка в текущем контуре.
CanvasRenderingContext2D.isPointInStroke()-
Указывает, содержится ли заданная точка внутри области, образованной обводкой контура.
Преобразования
Объекты в контексте отрисовки CanvasRenderingContext2D имеют текущую матрицу преобразования и методы для её манипулирования. Матрица преобразования применяется при создании текущей стандартной траектории, отрисовке текста, фигур и Path2D объектов. Перечисленные ниже методы остались по историческим причинам и для совместимости, так как в большинстве частей API сейчас и в будущем используются объекты DOMMatrix.
CanvasRenderingContext2D.getTransform()-
Возвращает текущую матрицу преобразования, применяемую к контексту.
CanvasRenderingContext2D.rotate()-
Добавляет поворот к матрице преобразования. Аргумент angle представляет собой угол поворота по часовой стрелке и выражается в радианах.
CanvasRenderingContext2D.scale()-
Добавляет масштабирование к единицам измерения холста по оси X по горизонтали и по оси Y по вертикали.
CanvasRenderingContext2D.translate()-
Добавляет сдвиг, перемещая холст и его начало по горизонтали на x и по вертикали на y единиц.
CanvasRenderingContext2D.transform()-
Умножает текущую матрицу преобразования на матрицу, описываемую её аргументами.
CanvasRenderingContext2D.setTransform()-
Сбрасывает текущее преобразование до единичной матрицы и затем вызывает метод
transform()с теми же аргументами. CanvasRenderingContext2D.resetTransform()-
Сбрасывает текущее преобразование до единичной матрицы.
Компоновка
CanvasRenderingContext2D.globalAlpha-
Значение альфа-канала, применяемое к фигурам и изображениям перед их компоновкой на холст. Значение по умолчанию
1.0(непрозрачный). CanvasRenderingContext2D.globalCompositeOperation-
Применяя
globalAlpha, устанавливается способ отрисовки фигур и изображений поверх существующего битового изображения.
Отрисовка изображений
CanvasRenderingContext2D.drawImage()-
Отрисовывает указанное изображение. Этот метод доступен в нескольких форматах, обеспечивая большую гибкость в использовании.
Обработка пикселей
См. также объект ImageData.
CanvasRenderingContext2D.createImageData()-
Создаёт новый пустой объект
ImageDataс указанными размерами. Все пиксели в новом объекте — прозрачный чёрный. CanvasRenderingContext2D.getImageData()-
Возвращает объект
ImageData, представляющий данные пикселей для области холста, определяемой прямоугольником, начинающимся в точке (sx, sy) и имеющим ширину sw и высоту sh. CanvasRenderingContext2D.putImageData()-
Рисует данные из объекта
ImageDataна битовом изображении. Если указан прямоугольник изменения, то будут нарисованы только пиксели из этого прямоугольника.
Сглаживание изображений
CanvasRenderingContext2D.imageSmoothingEnabled-
Режим сглаживания изображений; если отключён, изображения не будут сглаживаться при масштабировании.
CanvasRenderingContext2D.imageSmoothingQuality-
Позволяет установить качество сглаживания изображений.
Состояние холста
Контекст отрисовки CanvasRenderingContext2D содержит различные состояния стилей отрисовки (атрибуты для стилей линий, заливки, теней, текста). Следующие методы помогут вам работать с этим состоянием:
CanvasRenderingContext2D.save()-
Сохраняет текущее состояние стиля отрисовки с помощью стека, так что вы можете восстановить его, используя
restore(). CanvasRenderingContext2D.restore()-
Восстанавливает состояние стиля отрисовки до последнего элемента стека состояния, сохранённого методом
save(). CanvasRenderingContext2D.canvas-
Только для чтения ссылка на объект
OffscreenCanvas. CanvasRenderingContext2D.getContextAttributes()-
Возвращает объект, содержащий фактические атрибуты контекста. Атрибуты контекста можно запросить с помощью
HTMLCanvasElement.getContext(). CanvasRenderingContext2D.reset()-
Сбрасывает текущее состояние стиля отрисовки до значений по умолчанию.
Фильтры
CanvasRenderingContext2D.filter-
Применяет CSS или SVG фильтр к холсту; например, для изменения яркости или размытия.
Неподдерживаемые свойства и методы
Следующий метод не поддерживается в интерфейсе OffscreenCanvasRenderingContext2D:
CanvasRenderingContext2D.drawFocusIfNeeded()-
Если данный элемент имеет фокус, этот метод рисует рамку фокуса вокруг текущей траектории.
Спецификации
| Спецификация |
|---|
| HTML # the-offscreen-2d-rendering-context |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
OffscreenCanvasRenderingContext2D |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
|---|---|---|---|---|---|---|---|---|---|---|---|
arc |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
arcTo |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
beginPath |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
bezierCurveTo |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
canvas |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
clearRect |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
clip |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
closePath |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
commit |
Нет | Нет | 105 | Нет | 16.4–18 | Нет | 105 | Нет | 16.4–18 | Нет | Нет |
createConicGradient |
99 | 99 | 105 | 85 | 16.4 | 99 | 105 | 68 | 16.4 | 18.0 | 99 |
createImageData |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
createLinearGradient |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
createPattern |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
createRadialGradient |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
direction |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
drawImage |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
ellipse |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
fill |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
fillRect |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
fillStyle |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
fillText |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
filter |
69 | 79 | 116 | 56 | Нет | 69 | 116 | 48 | Нет | 10.0 | 69 |
font |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
fontKerning |
99 | 99 | 105 | 85 | Нет | 99 | 105 | 68 | Нет | 18.0 | 99 |
fontStretch |
99 | 99 | 117 | 85 | Нет | 99 | 117 | 68 | Нет | 18.0 | 99 |
fontVariantCaps |
99 | 99 | 117 | 85 | Нет | 99 | 117 | 68 | Нет | 18.0 | 99 |
|---|---|---|---|---|---|---|---|---|---|---|---|
getImageData |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
getLineDash |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
getTransform |
80 | 80 | 105 | 67 | 16.4 | 80 | 105 | 57 | 16.4 | 13.0 | 80 |
globalAlpha |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
globalCompositeOperation |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
imageSmoothingEnabled |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
imageSmoothingQuality |
69 | 79 | Нет | 56 | 16.4 | 69 | Нет | 48 | 16.4 | 10.0 | 69 |
isContextLost |
99 | 99 | 125 | 85 | Нет | 99 | 125 | 68 | Нет | 18.0 | 99 |
isPointInPath |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
isPointInStroke |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
letterSpacing |
99 | 99 | 115 | 85 | Нет | 99 | 115 | 68 | Нет | 18.0 | 99 |
lineCap |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
lineDashOffset |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
lineJoin |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
lineTo |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
lineWidth |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
measureText |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
miterLimit |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
moveTo |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
putImageData |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
quadraticCurveTo |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
rect |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
reset |
99 | 99 | 113 | 85 | 17.2 | 99 | 113 | 68 | 17.2 | 18.0 | 99 |
resetTransform |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
restore |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
rotate |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
|---|---|---|---|---|---|---|---|---|---|---|---|
roundRect |
99 | 99 | 112 | 85 | 16.4 | 99 | 112 | 68 | 16.4 | 18.0 | 99 |
save |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
scale |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
setLineDash |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
setTransform |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
shadowBlur |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
shadowColor |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
shadowOffsetX |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
shadowOffsetY |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
stroke |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
strokeRect |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
strokeStyle |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
strokeText |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
textAlign |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
textBaseline |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
textRendering |
99 | 99 | 116 | 85 | No | 99 | 116 | 68 | No | 18.0 | 99 |
transform |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
translate |
69 | 79 | 105 | 56 | 16.4 | 69 | 105 | 48 | 16.4 | 10.0 | 69 |
wordSpacing |
99 | 99 | 115 | 85 | No | 99 | 115 | 68 | No | 18.0 | 99 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvasRenderingContext2D