2012-08-24 97 views
5

在我的html 5畫布上,我繪製文本(必須在1行上),但它需要是恆定的字體大小和樣式,並且我擁有的空間寬度也是恆定的。因此文本需要適應這個空間,但是當文本太長並且越過空間時會出現問題。html5 canvas - 我如何拉伸文字?

那麼有沒有一種方法可以水平拉伸/壓縮文本? (像在PhotoShop)

有點像轉換成圖像,然後改變圖像的寬度?不知道這是最好的方式......

感謝

+0

你想伸展/壓縮它,但文本需要是恆定的大小? –

+0

它在伸展之前需要是一個恆定的大小。例如,字體樣式必須是30px Arial,然後如果它通過邊界,它將獲得80%的寬度重新調整大小。 – omega

+0

@omega:你是否只想調整大小,如果它不適合,或者調整大小直到空間的確切寬度? – pimvdb

回答

1

一個簡單的解決方案是繪製文本在另一個(在內存中)畫布上,然後用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); 
+0

,我可以使用百分比而不是像素嗎? – omega

+0

在這種情況下,由於源寬100px,是的。否則,你必須根據你的百分比計算目標寬度。 –

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(); 
} 
+2

這與按照@MrOBrian建議提供'maxWidth'的效果相同:http://jsfiddle.net/eGjak/888/。 – pimvdb

+0

+1我不知道Canvas的縮放功能。這比我的答案要好得多。 –