Skip to content

Instantly share code, notes, and snippets.

@chriskoch
Created April 14, 2010 16:59
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save chriskoch/366054 to your computer and use it in GitHub Desktop.
Save chriskoch/366054 to your computer and use it in GitHub Desktop.
draw a multiline string in a html5 canvas element including rotation font fontsize and color
/*
* draw a multiline string rotated in a canvas
*
* @param ctx (M) context of the canvas
* @param text (M) string may contain \n
* @param posX (M) horizontal start position
* @param posY (M) vertical start position
* @param textColor color
* @param rotation in degrees (by 360)
* @param font must be installed on client use websafe
* @param fonSize in Pixels
*
* all (M) params are mandatory - rest is optional
*/
function drawString(ctx, text, posX, posY, textColor, rotation, font, fontSize) {
var lines = text.split("\n");
if (!rotation) rotation = 0;
if (!font) font = "'serif'";
if (!fontSize) fontSize = 16;
if (!textColor) textColor = '#000000';
ctx.save();
ctx.font = fontSize + "px " + font;
ctx.fillStyle = textColor;
ctx.translate(posX, posY);
ctx.rotate(rotation * Math.PI / 180);
for (i = 0; i < lines.length; i++) {
ctx.fillText(lines[i],0, i*fontSize);
}
ctx.restore();
}
/* end */
<html>
<head>
<title>test</title>
<script type="text/javascript">
/*
* draw a multiline string rotated in a canvas
*
* @param ctx (M) context of the canvas
* @param text (M) string may contain \n
* @param posX (M) horizontal start position
* @param posY (M) vertical start position
* @param textColor color
* @param rotation in degrees (by 360)
* @param font must be installed on client use websafe
* @param fonSize in Pixels
*
* all (M) params are mandatory - rest is optional
*/
function drawString(ctx, text, posX, posY, textColor, rotation, font, fontSize) {
var lines = text.split("\n");
if (!rotation) rotation = 0;
if (!font) font = "'serif'";
if (!fontSize) fontSize = 16;
if (!textColor) textColor = '#000000';
ctx.save();
ctx.font = fontSize + "px " + font;
ctx.fillStyle = textColor;
ctx.translate(posX, posY);
ctx.rotate(rotation * Math.PI / 180);
for (i = 0; i < lines.length; i++) {
ctx.fillText(lines[i],0, i*fontSize);
}
ctx.restore();
}
function run() {
var nbc = document.getElementById("nb").getContext('2d');
drawString(nbc, 'hallo wie gehts?\ndas ist ein Winkel von 30 Grad!', 200, 200, '#444',30,"Chalkduster",36);
drawString(nbc, 'auf\'m Kopf', 500, 100, '#363',180,"Chalkduster",24);
drawString(nbc, 'und alles mit HTML5 JS coool',500,300,'#a66',-30,"Trebuchet MS",24);
drawString(nbc, 'nach unten',10,10,'#66a',90,"Trebuchet MS",24);
drawString(nbc, 'nach oben',27,590,'#66a',-90,"sans-serif",24);
}
</script>
</head>
<body onload="run();">
<canvas id="nb" width="800" height="600"></canvas>
</body>
</html>
@ravi06mishra
Copy link

Very Useful code. I've been working on this since last 4 days But couldn't find proper answer You saved my day's and money. Thanks.

@geongeorge
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment