#javascript #canvas #text #html5-canvas
#javascript #холст #текст #html5-canvas
Вопрос:
Задача: у нас есть width
и height
часть canvas. У нас есть font family
и line-height
.
Вопрос: Каков максимально возможный размер шрифта для некоторого случайного текста любой длины?
Вот несколько вспомогательных функций, которые помогают измерить высоту обернутого текста на холсте:
function calculateTextLines(context, maxWidth, lineHeight) {
minimum_text_width = 0
let words = text.split(' ')
let line = ''
let lines = []
// # Generates an array of wrapped line and
// # calculates the height of future text to center it later
for (let n = 0; n < words.length; n ) {
// # The next 3 lines calculates minimum possible width of the text box
let minimum_text_width_metrics = context.measureText(words[n])
if (minimum_text_width_metrics.width > minimum_text_width)
minimum_text_width = minimum_text_width_metrics.width
let testLine = line words[n] ' '
let metrics = context.measureText(testLine)
let testWidth = metrics.width
if (testWidth > maxWidth amp;amp; n > 0) {
lines.push(line)
line = words[n] ' '
} else {
line = testLine
}
}
lines.push(line)
if (minimum_text_width > canvas.width)
minimum_text_width = canvas.width
return lines
}
function calculateNewHeight(new_width, fontsize) {
let ctx = canvas.getContext('2d')
ctx.save()
ctx.font = fontsize 'px ' font.family
ctx.textAlign = font.align
const lines = calculateTextLines(ctx, new_width, font.line - height * fontsize)
ctx.restore()
return lines.length * (font.line - height * fontsize)
}
Комментарии:
1. Максимальный размер шрифта для размещения случайного текста может быть рассчитан следующим образом
ctx.font = fontSize "px " font; const maxSize = (ctx.canvas.width / ctx.measureText(text.trim()).width) * fontSize;
2. Принимаете ли вы во внимание, что текст также может быть перенесен в новые строки?