Mit HTML5, Canvas und JavaScript kann man mittlerweile eine Menge schöner Grafiken direkt im Browser rendern. Da ich neulich eine flexible Sprechblase benötigt habe, hier der Code dafür:
/**
* Draw a speech bubble on an HTML5-Canvas
*
* @author Alexander Thiemann
* @license CC BY-SA 2.0
*
* @param ctx Canvas 2d context
* @param text Text for the speech bubble
* @param x bottom left x-coordinate of speech bubble
* @param y bottom left y-coordinate of speech bubble
*
*/
function speechBubble(ctx, text, x, y) {
var messure = ctx.measureText(text);
var w = messure.width;
var h = 20;
ctx.beginPath();
ctx.strokeStyle="black";
ctx.lineWidth="1";
ctx.fillStyle="rgba(255, 255, 255, 0.8)";
ctx.moveTo(x, y);
ctx.lineTo(x + (w*0.2), y);
ctx.lineTo(x + (w*0.2), y+10);
ctx.lineTo(x + (w*0.3), y);
ctx.lineTo(x + w, y);
ctx.quadraticCurveTo(x + (w*1.1), y, x + (w*1.1), y-(h*0.2)); // corner: right-bottom
ctx.lineTo(x + (w*1.1), y-(h*0.8)); // right
ctx.quadraticCurveTo(x + (w*1.1), y-h, x + w, y-h); // corner: right-top
ctx.lineTo(x, y-h); // top
ctx.quadraticCurveTo(x - (w*0.1), y-h, x - (w*0.1), y-(h*0.8)); // corner: left-top
ctx.lineTo(x - (w*0.1), y-(h*0.2)); // left
ctx.quadraticCurveTo(x - (w*0.1), y, x, y); // corner: left-bottom
ctx.fill();
ctx.stroke();
ctx.closePath();
ctx.textAlign = 'left';
ctx.fillStyle = '#000';
ctx.fillText(text, x, y-6);
}
Verwendung:
HTML
JavaScript
var ctx = document.getElementById("bubble").getContext('2d');
speechBubble(ctx, "Das hier ist ein Test!", 5, 40);
Das Resultat:
Ziemlich schick, oder? 😉