在原來的網頁上,進行在線批註功能實現web
綜上考慮,能知足業務提的功能需求,直接上代碼:canvas
function textBecomeImg(text, fontsize, fontcolor) {
var canvas = document.createElement('canvas');
//小於32字加1 小於60字加2 小於80字加4 小於100字加6
$buHeight = 0;
if (fontsize <= 32) { $buHeight = 1; }
else if (fontsize > 32 && fontsize <= 60) { $buHeight = 2; }
else if (fontsize > 60 && fontsize <= 80) { $buHeight = 4; }
else if (fontsize > 80 && fontsize <= 100) { $buHeight = 6; }
else if (fontsize > 100) { $buHeight = 10; }
//對於g j 等有時會有遮擋,這裏增長一些高度
canvas.height = fontsize + $buHeight;
var context = canvas.getContext('2d');
// 擦除(0,0)位置大小爲200x200的矩形,擦除的意思是把該區域變爲透明
context.clearRect(0, 0, canvas.width, canvas.height);
context.fillStyle = fontcolor;
context.font = fontsize + "px Arial";
//top(頂部對齊) hanging(懸掛) middle(中間對齊) bottom(底部對齊) alphabetic是默認值
context.textBaseline = 'middle';
context.fillText(text, 0, fontsize / 2)
/*
// 若是在這裏直接設置寬度和高度會形成內容丟失 , 暫時未找到緣由 , 能夠用如下方案臨時解決
canvas.width = context.measureText(text).width;
//方案一:能夠先複製內容 而後設置寬度 最後再黏貼
//方案二:建立新的canvas,把舊的canvas內容黏貼過去
//方案三: 上邊設置完寬度後,再設置一遍文字
//方案一: 這個通過測試有問題,字體變大後,顯示不全,緣由是canvas默認的寬度不夠,
//若是一開始就給canvas一個很大的寬度的話,這個是能夠的。
//這裏先複製原來的canvas裏的內容
var imgData = context.getImageData(0,0,canvas.width,canvas.height);
//而後設置寬和高
canvas.width = context.measureText(text).width;
//最後黏貼複製的內容
context.putImageData(imgData,0,0);
*/
//方案三:改變大小後,從新設置一次文字
canvas.width = context.measureText(text).width;
context.fillStyle = fontcolor;
context.font = fontsize + "px Arial";
context.textBaseline = 'middle';
context.fillText(text, 0, fontsize / 2)
var dataUrl = canvas.toDataURL('image/png');//注意這裏背景透明的話,須要使用png
return dataUrl;
}複製代碼