Текст в canvas можно создавать так же, как и фигуры либо с заливкой, либо с контурной обводкой. К нему можно добавлять тень. С одной стороны текст в canvas - это текст с различными текстовыми свойствами, с другой - это картинка, и текстом можно рисовать.

Создание текста

Для начала нужно указать свойства текста:

  • context.font - размер и семейство шрифта, а также стиль и жирность шрифта. Например, context.font = "30px serif" или context.font = "bold 40px Arial, sans-serif";
  • context.fillStyle -  цвет заливки текста
  • context.strokeStyle - цвет контура для текста

Методы для добавления текста:

  • fillText(text, x, y [, maxWidth]) - вставляет заданный текст в положении (x,y). Можно при необходимости указать максимальную ширину.
  • strokeText(text, x, y [, maxWidth]) - вставляет контур заданного текста в положении (x,y). Можно при необходимости указать максимальную ширину.

Пример текста в canvas с заливкой, контуром и тенью.

Здесь вы также можете увидеть текст с ограничением по ширине.

Код примера:

Текст со шрифтом из Google Fonts

Чтобы отобразить текст из Google Fonts на холсте в canvas, вам нужно сначала выбрать нужный шрифт на сайте Google Fonts и получить код для его подключения. Затем, в HTML-коде добавbnm этот код в <head>, чтобы шрифт был доступен. После этого в теге <script> при рисовании текста на canvas, нужно сначала загрузить шрифт, и только после того, как загрузка произойдет, в функции then() установить свойство context.font  в значение, соответствующее выбранному шрифту.

Код:

Код загрузки Google-шрифта для использования в canvas:

Откуда вы можете получить ссылку на шрифт в формате woff2, который где-то находится на серверах Google? Все просто - скопируйте ссылку из кода для блока head и просто вставьте ее в адресной строке браузера - откроется документ примерно такого вида. Выбирайте нужный вам язык (в примере latin) и копируйте url из свойства src:

Помните о том, что при использовании кириллических шрифтов в Google Fonts вам нужно ставить фильтр по этому критерию, т.к. далеко не все шрифты там содержат начертание кириллических символов.

Фильтр кириллического шрифта в Google Fonts

После этого нужно уже отрисовать текст нужным шрифтом в canvas с помощью функции showText(), которую мы вызывали ранее:

В примере ниже вы найдете 2 варианта текста с разными шрифтами из коллекции Google Fonts.

See the Pen Canvas with Google Fonts by HTML-plus (@ambassador) on CodePen.

Свойства текста

Выравнивание текста

Свойство context.textAlign в Canvas определяет выравнивание текста, использованное при прорисовке.

Возможные значения:

Значениt start выравнивает текста в обычном начале строки (левостороннее выравнивание для языков, направленных слева направо, правостороннее - для направленных справа налево) и по внешнему виду совпадает со значением left. Значение end задает выравнивание текста в конце строки (правостороннее выравнивание для языков, направленных слева направо, левостороннее - для направленных справа налево). Оно дает примерно тот же результат, что и значение  right.

В примере ниже вы можете посмотреть на результаты выравниваний текста с помощью свойства textAlign и заодно на то, как можно нарисовать рамку вокруг текста в canvas.

Следует помнить, что выравнивание основывается на значении x метода fillText(). Так что, если значение textAlign равно "center", то текст будет прорисован в x - (width / 2).

See the Pen canvas textAlign by HTML-plus (@ambassador) on CodePen.

Базовая линия текста

Для управления расположением текста существует ряд свойств. Одно из них - context.textBaseline- свойство Canvas, определяющее текущую базовую строку при рисовании текста. Имеет такие значения:

По умолчанию - "alphabetic", значения "hanging" используется в тибетских и других индийских письменностях, а  "ideographic" - в китайской, японской и корейской письменностях, поэтому для изменений в основном выбирают "top", "middle" или  "bottom". На разницу можно посмотреть ниже или в примере на MDN.

See the Pen canvas text by HTML-plus (@ambassador) on CodePen.

Текстовые эффекты с помощью canvas

В примере ниже вы увидите исчезновение и появление градиентного текста из точек.

See the Pen canvas rainbow text by HTML-plus (@ambassador) on CodePen.

В этом примере текст распадается на точки и взрывается небольшим фейерверком.

See the Pen Canvas Particle Text Effect by HTML-plus (@ambassador) on CodePen.

Светящийся текст от Goran Rakic

See the Pen BackLight Text by Goran Rakic (@golle404) on CodePen.

Текст из черточек от Johan Karlsson

Эффект похож на появление морозных узоров на стекле.

See the Pen Text by Brownian Motion by Johan Karlsson (@DonKarlssonSan) on CodePen.

Рисование текстом от Tim Holman

See the Pen Drawing with text by HTML-plus (@ambassador) on CodePen.

Смещение символов текста от Chris Gannon

See the Pen A PILE OF BOLLOCKS by Chris Gannon (@chrisgannon) on CodePen.

Текст из точек от Tibo 

Эффект реализован на основе dat.GUI.

See the Pen Text particle by Tibo (@Gthibaud) on CodePen.

Текст из частиц от Sean Free

В примере есть возможность поиграться с настройками.

See the Pen Particle Text by Sean Free (@seanfree) on CodePen.

Текст в виде кода из матрицы от airen

Текст здесь формируется на основе строки String.fromCharCode(1e2 + Math.random() * 33).

See the Pen Canvas: Run Matrix Text by 大漠 (@airen) on CodePen.

"Невидимые чернила" от Darryl Huffman

Часть текста с классом ink заменяется элементом canvas с частицами, которые делают текст нечитабельным. Но он отображается при наведении мыши.

See the Pen Invisible Ink | Mouse Over! iOS 10 by Darryl Huffman (@darrylhuffman) on CodePen.

Эффект появления текста при наведении от Tyler Durrett

Тут, скорее эффект для текста, который не находится в canvas, но сам код интересен и красив.

See the Pen Reveal Hidden Text by Tyler Durrett (@electricgarden) on CodePen.

Автор: Alex

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *