canvas根据传入文本生成图片
代码
export function createImage(text, style = {}, canvasFontStyle = undefined) {
var win = window
var doc = document
var canvas = doc.createElement('canvas')
var ctx = canvas.getContext('2d', {alpha: false})
const devicePixelRatio = win.devicePixelRatio || 1
const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1
const radio = devicePixelRatio / backingStoreRatio
canvas.height = 22 * radio
if (!canvasFontStyle) {
canvasFontStyle = 'normal normal normal 20px "-apple-system", Arial, Microsoft YaHei, Microsoft JhengHei, Helvetica Neue, sans-serif'
}
ctx.font = canvasFontStyle
const width = canvas.width = radio * (ctx.measureText(text).width + 2)
ctx.fillStyle = '#f1f4f9'
ctx.fillRect(0, 0, canvas.width, canvas.height)
if (radio > 1) {
ctx.scale(radio, radio)
}
ctx.font = canvasFontStyle
ctx.fillStyle = style.color
ctx.textBaseline = 'middle'
ctx.fillText(text, 0, 11)
const url = canvas.toDataURL('image/png')
ctx.clearRect(0, 0, canvas.width, canvas.height)
return {
width: width / radio,
url
}
}
使用
const img = this.createImage(`${s}`, {
color: '#ADB8BE'
}, `normal normal normal ${18}px "-apple-system", Arial, Microsoft YaHei, Microsoft JhengHei, Helvetica Neue, sans-serif`)