1.绘制圆形头像
ctx.beginPath(); ctx.arc(80, 550, 40, 0, 2 * Math.PI); ctx.clip(); ctx.drawImage(_this.AvatarTempFilePath, 40,510, 80, 80); ctx.restore(); ctx.save();
2.文本截取不换行...
/**
* 文本截取不换行...
* @param {Object} ctx
* @param {String} text
* @param {Number} fontSize
* @param {Number} maxWidth
* @return {String} newStr
*/
cutText:function(ctx,text,fontSize,maxWidth){
ctx.setFontSize(fontSize)
let arrText = text.split('');
let line = '';
if(ctx.measureText(text).width <= maxWidth){
return text;
}
for (let i = 0; i < arrText.length; i++) {
line += arrText[i];
let metrics = ctx.measureText(line);
let width = metrics.width;
if(width>=maxWidth){
return line +'...';
}
}
},3.获取文本折行兼容/n换行
/**
* 获取文本折行兼容/n换行
* @param {Object} ctx
* @param {String} text
* @param {Number} fontSize
* @param {Number} maxWidth
* @return {Array} arrTr
*/
getTextLine: function(ctx,text,fontSize,maxWidth){
ctx.setFontSize(fontSize)
let arrText = text.split('');
let line = '';
let arrTr = [];
if((ctx.measureText(text).width <= maxWidth)&&(text.indexOf('/n')==-1)){
arrTr.push(text)
return arrTr;
}
for (let i = 0; i < arrText.length; i++) {
line += arrText[i];
let metrics = this.ctx.measureText(line);
let width = metrics.width;
if((width>=maxWidth && i>0) || (i == arrText.length - 1) ){
arrTr.push(line);
line = ''
}
if(arrText[i]=='/'&&arrText[i+1]=='n'){
i+=1
line =line.substr(0,line.length-1)
arrTr.push(line);
arrTr.push('');//换行
line = ''
}
}
return arrTr;
},4.绘制圆角矩形
/**
* 绘制圆角矩形
* @param {Object} ctx
* @param {String} x
* @param {Number} y
* @param {Number} w
* @return {Array} h
* @return {Array} r
*/
roundRect: function(ctx, x, y, w, h, r) {
// 开始绘制
ctx.beginPath()
// 因为边缘描边存在锯齿,最好指定使用 transparent 填充
// 这里是使用 fill 还是 stroke都可以,二选一即可
ctx.setFillStyle('transparent')
// ctx.setStrokeStyle('transparent')
// 左上角
ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)
// border-top
ctx.moveTo(x + r, y)
ctx.lineTo(x + w - r, y)
ctx.lineTo(x + w, y + r)
// 右上角
ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2)
// border-right
ctx.lineTo(x + w, y + h - r)
ctx.lineTo(x + w - r, y + h)
// 右下角
ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5)
// border-bottom
ctx.lineTo(x + r, y + h)
ctx.lineTo(x, y + h - r)
// 左下角
ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI)
// border-left
ctx.lineTo(x, y + r)
ctx.lineTo(x + r, y)
// 这里是使用 fill 还是 stroke都可以,二选一即可,但是需要与上面对应
ctx.setFillStyle('#ffffff')
ctx.fill()
// ctx.stroke()
ctx.closePath()
// 剪切
ctx.clip()
//退出
ctx.restore()
},
