2010-04-09 10 views

Respuesta

77

He tirado juntos una demostración simple en jsFiddle aquí mostrando cómo hacer esto con @ font-face: http://jsfiddle.net/zMKge/

Opera también tiene una explicación sencilla sobre el uso de <canvas>, incluida la API de texto, pero estoy no lo suficientemente frío como para tener dos hipervínculos. :)

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

editar: no workee en firefox .... bien en cromo. no hay cruz – jdee

+6

Tenga en cuenta este problema, aunque: http://stackoverflow.com/questions/2756575/drawing-text-to-canvas-with-font-face-does-not-work-at-the-first -time – Alsciende

+0

El problema de Firefox se debe a que el navegador es muy estricto en su política de origen. Las estrellas deben alinearse y * la imagen, la fuente y la página web deben estar TODAS en el mismo dominio * –

4

simplemente he respondido a esta pregunta aquí: Preload font HTML5, JS, Kinetic.js?

La parte esencial:

@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; 
} 

No debería importar si está usando KineticJS o no, la única diferencia sin KineticJS es que posiblemente crearía el elemento Canvas directamente con HTML en lugar de usar una capa div como contenedor. Después de todo KineticJS solo crea un elemento Canvas normal en ese contenedor.

+0

Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. -solo las respuestas pueden volverse inválidas si la página enlazada cambia. –

+2

en ese caso yo diría que está bien, porque enlaza con stackoverflow;) - pero incluiré la parte esencial. – luschn