Darstellen von Texten in einem Canvas-Objekt
In einem Canvas-Objekt kann man nicht nicht grafische Elemente im herkömmlichen Sinn oder bereits existierende Grafik-Dateien darstellen, sondern auch Text.
Methoden
Die beiden Hauptmethoden zum Anzeigen von Text in einem Cavas-Objekt sind
fillText(text, xPosition, yPosition [,Maxbreite])undstrokeText(text, xPosition, yPosition [,Maxbreite])
Der optionale Parameter Maxbreite gibt die maximale Breite des Textobjektes an, der Text wird, wenn erforderlich, skaliert
Attribute des Textinterfaces
Die Darstellung des Textes wird durch die folgenden Attribute des Text-Interfaces beeinflusst:
font('Textwert'), ist ein Textwert, der sich an der Kurzdarstellung in CSS-Dateien orientierttextAlign('Textkonstante'), wobei die Textkonstantestart,end,left,right, odercentersein kann.textBaseline('Textkonstante'), wobei die Textkonstantetop,hanging,middle,alphabetic,ideographicoderbottomsein kann.
Außerdem wirken sich auf die Darstellung des Textes die Attribute strokeStyle, fillStyle, shadowOffsetX, shadowOffsetY, shadowBlur und ShadowColor aus.
Zunächst ein triviales Beispiel mit der Methode fillText:
var myCanvas = document.getElementById('canvas_id');
if(myCanvas.getContext){
var cx = myCanvas.getContext('2d');
//Zeichnungsfläche löschen
clean(cx);
//Einstellungen sichern
cx.save();
//Einfach etwas Text ausgeben
cx.fillText("Text mit Standardeinstellungen mit Methode fillText", 0, 10);
//Einstellungen wiederherstellen
cx.restore();
}
Da alle für die Textdarstellung erforderlichen Attribute bereits mit den Standardwerten vorbelegt sind, wird auch Text angezeigt. Das Gleiche gilt für dieses Trivialbeispiel mit der Methode strokeText:
var myCanvas = document.getElementById('canvas_id');
if(myCanvas.getContext){
var cx = myCanvas.getContext('2d');
clean(cx);
//Einstellungen sichern
cx.save();
cx.strokeText("Text mit Standardeinstellungen mit Methode strokeText", 0, 10);
//Einstellungen wiederherstellen
cx.restore();
}
Unter den Eingangs genannten textspezifischen Attributen ragt hinsichtlich der Bedeutung das Attribut font('Textwert') heraus. Mit dem Textwert werden ähnlich der CSS-Shorthand-Notierung Schriftart, Schriftgröße sowie die Merkmale fett und kursiv festgelegt. Das geschieht so:
var myCanvas = document.getElementById('canvas_id');
if(myCanvas.getContext){
var cx = myCanvas.getContext('2d');
clean(cx);
//Einstellungen sichern
cx.save();
cx.fillText("Text mit Standardfont und fillText", 0, 10);
cx.strokeText("Text mit Standardfont und strokeText",300, 10);
//Schrift festlegen
cx.font = 'bold italic 16px Verdana';
cx.fillText('fill bold italic 16px Verdana', 0, 50);
cx.strokeText('stroke bold italic 16px Verdana',300, 50);
//Einstellungen wiederherstellen
cx.restore();
}
Weitere Attribute
Das Aussehen der mit strokeText erzeugten Textgrafik kann mit strokeStyle und lineWidth beeinflusst werden. Für fillText ist nur fillStyle ausschlaggebend.
Texte mit Gradient
Bei der Zuordnung von strokeStyle und fillStyle können auch Gradienten verwendet werden.
Texte mit Muster
Beide Methoden können auch ein zuvor mit createPattern erzeugtes Muster verwenden.
Parameter maxbreite und Methode measureText
Wie Anfangs bereits erwähnt kann beiden Methoden der optionale Parameter Maxbreite mitgegeben werden. Dadurch kann die Zeichnungsbreite des Textes verringert werden. Eine Verbreiterung ist hingegen nicht möglich.
Um die ursprüngliche Ausgabebreite des Textes zu ermitteln wird die Methode measureText verwendet.
var myCanvas = document.getElementById('canvas_id');
if(myCanvas.getContext){
var cx = myCanvas.getContext('2d');
clean(cx);
//Einstellungen sichern
cx.save();
//Schrift festlegen
cx.font = '18px Verdana';
tx1='Text Verdana 18px und fillText'
tx2='Text Verdana 18px und strokeText'
cx.fillText(tx1, 0, 20);
cx.strokeText(tx2,320, 20);
var tx1m=cx.measureText(tx1);
var tx2m=cx.measureText(tx2);
//Text auf 90% skalieren
cx.fillText(tx1, 0, 45, tx1m.width*0.9);
cx.strokeText(tx2,320, 45, tx2m.width*0.9);
//Text auf 110% skalieren bewirkt nichts
cx.fillText(tx1, 0, 65, tx1m.width*1.1);
cx.strokeText(tx2,320, 65, tx2m.width*1.1);
//Einstellungen wiederherstellen
cx.restore();
}