В моем инструменте редактора «на лету» я бы очень хотел получить фактическую визуализированную высоту текста/шрифта - (я имею в виду не просто получение размера шрифта CSS, ни расчетного, ни предустановленного).Javascript - получить фактическую визуализированную высоту шрифта
Возможно ли это в javascript?
Если нет напрямую, возможно ли что-то в качестве визуализации в холсте так же, как оно отображается как обычный текст, - а затем выяснить?
EDIT - мое «DEV» решение: на основе предложенных ссылок я построил немного чистый яваскрипт код, который проходит через пиксели в полотне и анализирует ли пиксель белый или нет, и действует соответствующим образом, то вряд ли версия разработчик коды - просто выводит несколько полезной информации и показывает, как получить доступ к вычисленным данным - http://jsfiddle.net/DV9Bw/1325/
HTML:
<canvas id="exampleSomePrettyRandomness" width="200" height="60"></canvas>
<div id="statusSomePrettyRandomness"></div>
JS:
function findPos(obj) {
var curleft = 0, curtop = 0;
if (obj.offsetParent) {
do {
curleft += obj.offsetLeft;
curtop += obj.offsetTop;
} while (obj = obj.offsetParent);
return { x: curleft, y: curtop };
}
return undefined;
}
var status = document.getElementById('statusSomePrettyRandomness');
var example = document.getElementById('exampleSomePrettyRandomness');
var context = example.getContext('2d');
context.fillStyle = "rgb(255,255,255)";
context.fillRect(0, 0, 200, 200);
context.fillStyle = "rgb(0,0,0)";
context.font = "30px Arial";
context.fillText("Hello World",0,30);
var pos = findPos(example);
var x = example.pageX - pos.x;
var y = example.pageY - pos.y;
var foundTop = false;
xPos = 0;
yPos = 0;
topY = -1;
bottomY = -1;
var fuse = 1000;
while(fuse-- > 0){
//status.innerHTML += yPos+"<br>";
if(yPos == (example.offsetHeight - 2)){
xPos++;
yPos = 0;
continue;
}
var data = context.getImageData(xPos, yPos, 1, 1).data;
if(! foundTop){
if((data[0] != 255) && (data[1] != 255) && (data[2] != 255)){
topY = yPos;
status.innerHTML += "<br>Found top: "+topY+" X:"+xPos+" Color: rgba("+data[0]+","+data[1]+","+data[2]+")"+"<br>";
foundTop = true;
}
} else {
if((data[0] == 255) && (data[1] == 255) && (data[2] == 255)){
bottomY = yPos;
status.innerHTML += "<br>Found bottom: "+bottomY+" X:"+xPos+"<br>";
break;
}
}
yPos++;
if(yPos > example.offsetHeight){
status.innerHTML += ""
+"Y overflow ("+yPos+">"+example.offsetHeight+")"
+" - moving X to "+xPos
+" - reseting Y to "+yPos
+"<br>"
;
xPos++;
yPos = 0;
}
}
status.innerHTML += "Fuse:"+fuse+", Top:"+topY+", Bottom: "+bottomY+"<br>";
status.innerHTML += "Font height should be: "+(bottomY-topY)+"<br>";
EDIT 2: Почему это не дубликат: мой вопрос касается действительно реальной визуализированной высоты шрифта или буквы, «possible duplicate» - это то, сколько места вам нужно, чтобы распечатать текст, предоставленные ответы не отвечайте на мою точную проблему.
Я не уверен, что я завершаю Я получил ваш вопрос, и я нахожусь на пике rn, но поскольку вы отметили свой вопрос [html5-canvas], возможно, [этот вопрос] (http://stackoverflow.com/q/17627893/3702797), и его ответ может помочь вам , – Kaiido
Я отметил его, потому что я предполагаю, что может быть решение при рисовании шрифта так же, как оно отображается как текст, - но в холсте, как пиксели изображения, то я думаю, что я мог бы каким-то образом проанализировать пиксели холста, потому что знаю, что такое базовый цвет и каков цвет утопленного шрифта :) Теперь это более ясно? –
Возможно, попробуйте этот подход? http://stackoverflow.com/questions/1134586/how-can-you-find-the-height-of-text-on-an-html-canvas –