Изменить размер шрифта Canvas без знания семейства шрифтов
Есть ли способ изменить размер шрифта в контексте холста без необходимости знать/писать семейство шрифтов.
var ctx = document.getElementById("canvas").getContext("2d");
ctx.font = '20px Arial'; //Need to speficy both size and family...
Примечание:
ctx.fontSize = '12px'; //doesn't exist so won't work...
ctx.style.fontSize = '20 px' //doesn't exist so won't work...
//we are changing the ctx, not the canvas itself
Другое примечание: я мог бы сделать что-то вроде: определить, где "px", удалить, что перед "px", и заменить его на размер моего шрифта. Но мне бы хотелось, если возможно, что-то проще.
Ответы
Ответ 1
Обновление: (из комментариев) Нет смысла определять шрифт. Шрифт Canvas 'моделируется после короткой версии шрифта в CSS.
Однако на холсте (или типе шрифта) всегда есть шрифт, поэтому вы можете сначала извлечь текущий шрифт, используя его следующим образом:
var cFont = ctx.font;
Затем замените аргументы размера и установите его обратно (обратите внимание, что там может быть и параметр стиля).
Простой раскол для примера:
var fontArgs = ctx.font.split(' ');
var newSize = '12px';
ctx.font = newSize + ' ' + fontArgs[fontArgs.length - 1]; /// using the last part
Вам понадобится поддержка стиля, если это необходимо (IIRC он приходит первым, если используется).
Обратите внимание, что размер шрифта - это четвертый параметр, поэтому это не будет работать, если у вас будет/не будет вариант шрифта (жирный, курсив, наклонный), вариант шрифта (нормальный, малый размер) и font-weight (жирный шрифт и т.д.),.
Ответ 2
Вот более простой и понятный способ изменения размера шрифта, который будет работать независимо от того, используете ли вы вариант шрифта или шрифт или нет.
Предполагая, что ваш новый размер шрифта равен 12px
ctx.font = ctx.font.replace(/\d+px/, "12px");
Или хороший лайнер, если вы хотите увеличить на 2 пункта:
ctx.font = ctx.font.replace(/\d+px/, (parseInt(ctx.font.match(/\d+px/)) + 2) + "px");
Ответ 3
Чтобы правильно ответить на ваш вопрос, нет способа изменить размер шрифта контекста canvas, не зная/не записывая семейство шрифтов.
Ответ 4
попробуйте это (используя jquery):
var span = $('<span/>').css('font', context.font).css('visibility', 'hidden');
$('body').append(span);
span[0].style.fontWeight = 'bold';
span[0].style.fontSize = '12px';
//add more style here.
var font = span[0].style.font;
span.remove();
return font;