¿Cómo puedo escribir texto en un elemento de lienzo HTML5?

150

¿Es posible escribir texto en HTML5 canvas?

Budda
fuente
1
Recomiendo leer el <a href=" diveintohtml5.info/"> diveintohtml5 </ a > sitio, tiene su propio <a href=" diveintohtml5.info/canvas.html#text"> capítulo sobre text</a> . Es una muy buena lectura.
chelmertz
Además de las otras respuestas si desea escribir texto usando excanvas (para soporte de IE) necesitará un script adicional, disponible aquí: code.google.com/p/explorercanvas/issues/detail?id=6 La descarga predeterminada ( code.google.com/p/explorercanvas/downloads/list ) no incluye el método fillText y strokeText.
Castrohenge
2
@IvanCastellanos ¿Encontró resultados de búsqueda relevantes? Puede ser útil publicarlos aquí, si encuentra alguno.
Anderson Green
2
@IvanCastellanos: esta pregunta (al menos para mí) ahora aparece en primer lugar para "texto de lienzo HTML" en Google. ¿No es ese el propósito de Stack Overflow?
colincameron
Sí, es fácil hacerlo en Canvas. Agregaría más a su publicación para que pueda mostrar algunos ejemplos de lo que ha intentado y lo que no ha intentado. Solo la pregunta no es tan beneficiosa para Stackoverflow.com
Doug Hauf

Respuestas:

234

var canvas = document.getElementById("my-canvas");
var context = canvas.getContext("2d");

context.fillStyle = "blue";
context.font = "bold 16px Arial";
context.fillText("Zibri", (canvas.width / 2) - 17, (canvas.height / 2) + 8);
#my-canvas {
  background: #FF0;
}
<canvas id="my-canvas" width="200" height="120"></canvas>

Zibri
fuente
3
¿Hay alguna forma de obtener el ancho y el tamaño de la fuente para que podamos centrarla? (Contenido dinámico)
Oliver Dixon
1
suponga: su lienzo width-200, height: 100 horizontal : ctx.textAlign = 'center' ctx.fillText ('Hello', 100 , 10) vertical : ctx.textBaseline = 'middle' ctx.fillText ('Hello', 10 , 50 )
tomision
Documentación:fillText
jpaugh el
7

Dibujar texto en un lienzo

Margen:

<canvas id="myCanvas" width="300" height="150"></canvas>

Script (con pocas opciones diferentes):

<script>
    var canvas = document.getElementById('myCanvas');
    var ctx = canvas.getContext('2d');
    ctx.font = 'italic 18px Arial';
    ctx.textAlign = 'center';
    ctx. textBaseline = 'middle';
    ctx.fillStyle = 'red';  // a color name or by using rgb/rgba/hex values
    ctx.fillText('Hello World!', 150, 50); // text and position
</script>

Consulte la documentación de MDN y este ejemplo de JSFiddle .

Lior Elrom
fuente
6

Canvasel soporte de texto es realmente muy bueno - se puede controlar font, size, color, horizontal alignment, vertical alignment, y se puede también obtener medidas del texto para obtener el ancho de texto en píxeles. Además, también se puede utilizar tela transformsa rotate, stretche incluso inverttexto.

Eric Rowell
fuente
5

Es realmente fácil escribir texto en un lienzo. No estaba claro si desea que alguien ingrese texto en la página HTML y luego haga que ese texto aparezca en el lienzo, o si iba a usar JavaScript para escribir la información en la pantalla.

El siguiente código escribirá algo de texto en diferentes fuentes y formatos en su lienzo. Puede modificar esto como desee para probar otros aspectos de la escritura en un lienzo.

 <canvas id="YourCanvasNameHere" width="500" height="500">Canvas not supported</canvas>

 var c = document.getElementById('YourCanvasNameHere');
 var context = c.getContext('2d'); //returns drawing functions to allow the user to draw on the canvas with graphic tools. 

Puede colocar la etiqueta de ID del lienzo en el HTML y luego hacer referencia al nombre o puede crear el lienzo en el código JavaScript. Creo que en su mayor parte veo la <canvas>etiqueta en el código HTML y, en ocasiones, veo que se creó dinámicamente en el propio código JavaScript.

Código:

  var canvas = document.getElementById('myCanvas');
  var context = canvas.getContext('2d');

  context.font = 'bold 10pt Calibri';
  context.fillText('Hello World!', 150, 100);
  context.font = 'italic 40pt Times Roman';
  context.fillStyle = 'blue';
  context.fillText('Hello World!', 200, 150);
  context.font = '60pt Calibri';
  context.lineWidth = 4;
  context.strokeStyle = 'blue';
  context.strokeText('Hello World!', 70, 70);
Paul D. Waite
fuente
4

Depende de lo que quieras hacer con eso, supongo. Si solo quieres escribir un texto normal, puedes usarlo .fillText().

Ian Devlin
fuente
3

Sí, por supuesto, puede escribir un texto en el lienzo con facilidad, y puede establecer el nombre de la fuente, el tamaño de la fuente y el color de la fuente. Hay dos métodos para construir un texto en Canvas, es decir, fillText () y strokeText () . El método fillText () se usa para hacer un texto que solo se puede rellenar con color, mientras que strokeText () se usa para hacer un texto que solo se le puede dar un color de contorno. Entonces, si queremos construir un texto que se llene de color y tenga color de contorno, debemos usar ambos.

Aquí el ejemplo completo, cómo escribir texto en lienzo:

<canvas id="Canvas01" width="400" height="200" style="border:2px solid #bbb; margin-left:10px; margin-top:10px;"></canvas>

<script>
  var canvas = document.getElementById('Canvas01');
  var ctx = canvas.getContext('2d');

  ctx.fillStyle= "red";
  ctx.font = "italic bold 35pt Tahoma";
  //syntax : .fillText("text", x, y)
  ctx.fillText("StacOverFlow",30,80);

</script>

Aquí la demostración de esto, y puedes probar tu mismo para cualquier modificación: http://okeschool.com/examples/canvas/html5-canvas-text-color

Kuncara Kurniawan
fuente
1

Encontré un buen tutorial en oreilly.com .

Código de ejemplo:

<canvas id="canvas" width ='600px'></canvas><br />
Enter your Text here .The Text will get drawn on the canvas<br />
<input type="text" id="text" onKeydown="func();"></input><br />
</body><br />
<script>
function func(){
var e=document.getElementById("text"),t=document.getElementById("canvas"),n=t.getContext("2d");
n.fillStyle="#990000";n.font="30px futura";n.textBaseline="top";n.fillText(e.value,150,0);n.fillText("thank you, ",200,100);
n.fillText("Created by ashish",250,120)
}
</script>

cortesía: @Ashish Nautiyal

Simon K Bhatta4ya
fuente
1

Es fácil escribir texto en un lienzo. Digamos que tu lienzo se declara como a continuación.

<html>
  <canvas id="YourCanvas" width="500" height="500">
   Your Internet Browser does not support HTML5 (Get a new Browser)
  </canvas>
</html>

Esta parte del código devuelve una variable en el lienzo, que es una representación de su lienzo en HTML.

  var c  = document.getElementById("YourCanvas");

El siguiente código devuelve los métodos para dibujar líneas, texto, rellenos en su lienzo.

  var ctx = canvas.getContext("2d");

<script>
  ctx.font="20px Times Roman";
  ctx.fillText("Hello World!",50,100);

  ctx.font="30px Verdana";

  var g = ctx.createLinearGradient(0,0,c.width,0);

  g.addColorStop("0","magenta");
  g.addColorStop("0.3","blue");
  g.addColorStop("1.0","red");

  ctx.fillStyle=g; //Sets the fille of your text here. In this case it is set to the gradient that was created above. But you could set it to Red, Green, Blue or whatever.

  ctx.fillText("This is some new and funny TEXT!",40,190);
</script>

Hay una guía para principiantes en Amazon para kindle http://www.amazon.com/HTML5-Canvas-Guide-Beginners-ebook/dp/B00JSFVY9O/ref=sr_1_4?ie=UTF8&qid=1398113376&sr=8-4&keywords=html5 + lienzo + principiantes que bien valen la pena. Lo compré hace un par de días y me mostró muchas técnicas simples que fueron muy útiles.

Doug Hauf
fuente