5

在我的html 5画布中,我绘制文本(必须在 1 行),但它需要是恒定的字体大小和样式,并且我拥有的空间宽度也是恒定的。因此,文本需要适合该空间,但是当文本太长并超出空间时会出现问题。

那么有没有办法可以水平拉伸/压缩文本?(就像在 PhotoShop 中一样)

将其转换为图像然后更改图像的宽度之类的东西?不确定这是否是最好的方法...

谢谢

4

2 回答 2

9

您可以measureText先确定文本的大小,然后根据需要缩放画布:http: //jsfiddle.net/eGjak/887/

var text = "foo bar foo bar";
ctx.font = "30pt Arial";

var width = ctx.measureText(text).width;
if(width <= 100) {
    ctx.fillText(text, 0, 100);
} else {
    ctx.save();
    ctx.scale(100 / width, 1);
    ctx.fillText(text, 0, 100);
    ctx.restore();
}
于 2012-08-24T16:44:27.693 回答
2

一个简单的解决方案是在另一个(内存中)画布中绘制文本,然后使用 drawImage 将画布内容粘贴到真实的目标画布中。

像这样的东西(让它可以根据您的需要进行参数化,这里以 100 到 80 的比例拉伸):

var tempimg = document.createElement('canvas');
tempimg.width = 100;
tempimg.height = 10;
oc = tempimg.getContext('2d');
oc.fillText(...)
yourdestcontext.drawImage(tempimg, 0, 0, 100, 10, x, y, 80, 10);
于 2012-08-24T16:26:41.250 回答