2010-04-09 2 views
60

Я смотрел на вещи, как Cufon и Typeface.js, но они, кажется, SIFR альтернативы, и не позволяют установить произвольные координаты и сделать пользовательский тип на а <canvas>Как я могу использовать пользовательские шрифты в элементе Canvas HTML5?

Кто есть какие-нибудь идеи?

ответ

77

Я бросил вместе простой демо на jsfiddle здесь, показывающий, как сделать это с помощью @ шрифта лицо: http://jsfiddle.net/zMKge/

Opera также имеет простой учебник по использованию <canvas>, включая текст API, но я не достаточно холодно, чтобы иметь две гиперссылки. :)

CSS:

@font-face { 
    font-family: 'KulminoituvaRegular'; 
    src: url('http://www.miketaylr.com/f/kulminoituva.ttf'); 
} 

Javascript:

var ctx = document.getElementById('c').getContext('2d'); 
var kitty = new Image(); 
kitty.src = 'http://i954.photobucket.com/albums/ae30/rte148/891blog_keyboard_cat.gif'; 
kitty.onload = function(){ 
    ctx.drawImage(this, 0,0,this.width, this.height); 
    ctx.font   = '68px KulminoituvaRegular'; 
    ctx.fillStyle = 'orangered'; 
    ctx.textBaseline = 'top'; 
    ctx.fillText ('Keyboard Cat', 0, 270); 
}; 
+2

редактирование: нет работник в firefox .... мелкий в хром. нет ли креста – jdee

+6

Помните об этой проблеме: http://stackoverflow.com/questions/2756575/drawing-text-to-canvas-with-font-face-does-not-work-at-the-first -time – Alsciende

+0

Проблема с Firefox связана с тем, что браузер очень строгий по политике одного и того же происхождения. Звезды должны выровнять и * изображение, шрифт и веб-страница должны ВСЕ быть в одном домене * –

4

Я просто ответил на этот вопрос здесь: Preload font HTML5, JS, Kinetic.js?

Существенная часть:

@font-face { 
    font-family: 'myfont'; 
    src: url('myfont.eot'); 
    src: url('myfont.eot?#iefix') format('embedded-opentype'), 
     url('myfont.woff') format('woff'), 
     url('myfont.ttf') format('truetype'), 
     url('myfont.svg#myfont') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

Не имеет значения, используете ли вы KineticJS или нет, единственная разница без KineticJS заключается в том, что вы могли бы создать элемент Canvas непосредственно с помощью HTML вместо использования div-слоя в качестве контейнера. Ведь KineticJS просто создает обычный контейнер Canvas в этом контейнере.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для ссылки. - только ответы могут стать недействительными, если связанная страница изменится. –

+2

в этом случае я бы сказал, что все в порядке, потому что оно ссылается на stackoverflow;), но я буду включать важную часть. – luschn

 Смежные вопросы

  • Нет связанных вопросов^_^