Использование шрифтов шрифта с canvas fillText - PullRequest
4 голосов
/ 09 июня 2011

РЕДАКТИРОВАТЬ : Ну, кажется, что шрифт загружается, когда он используется элементом в DOM, поэтому я просто использовал скрытый Div с текстом, используя шрифт font-face, и теперь он работает ...:)

Я использую этот код для обновления значка с помощью ряда обновлений, но я хотел бы написать число, используя собственный пиксельный шрифт.

Это мой код Javascript

            var canvas = document.createElement('canvas'),
            ctx,
            img = document.createElement('img'),
            link = document.getElementById('favicon').cloneNode(true),
            updates = data;

        if (canvas.getContext) {
          canvas.height = canvas.width = 16; // set the size
          ctx = canvas.getContext('2d');
          img.onload = function () { // once the image has loaded
            ctx.drawImage(this, 0, 0);
            ctx.font = 'normal 12px Visitor';
            ctx.fillStyle = '#213B55';
            ctx.textBaseline="middle";
            ctx.textAlign="center";
            ctx.fillText(updates, 10, 10);
            link.href = canvas.toDataURL('image/png');
            document.body.appendChild(link);
          };
          img.src = 'favicon_new.png';
        }

Это у меня в CSS

@font-face {
font-family: 'Visitor';
font -style: normal;
font-weight: normal;
src: url('fonts/visitor.woff') format('woff');

Если я изменю эту строку:

  ctx.font = 'normal 12px Visitor';

С 'нормальным 12px Arial' работает нормально. Если я использую собственный шрифт «Посетитель», он просто меняет значок, но я не вижу номер.

Есть идеи, в чем может быть проблема?

1 Ответ

1 голос
/ 18 декабря 2014

Arial - это веб-безопасный шрифт , означающий, что он будет отображаться независимо от того, какой у вас компьютер или мобильное устройство (он же fallback ).

Вот пример кода с Pacifico от Google Fonts (который не является веб-безопасным шрифтом).

<link href="http://fonts.googleapis.com/css?family=Pacifico" rel="stylesheet" type="text/css">
<script>
 window.onload=function() {
  var canvas = document.getElementById("canvas");
  var context = canvas.getContext("2d");
  context.fillStyle = "blue";
  context.font = "16pt Pacifico";
  context.fillText("Cursive font", 50, 50);
 }
</script>
<canvas id="canvas" width="200" height="200"></canvas>

Это должно быть возможно с другими шрифтами.

Убедитесь, что у @ font-face есть стиль шрифта: обычный; и вес шрифта: 400; .

...