2011-05-28 9 views
10

Actualmente estoy trabajando en un proyecto de JavaScript que usa el lienzo HTML5 como un objetivo de representación. Para que mi código funcione correctamente con las interfaces (rígidamente especificadas) que me han proporcionado, necesito poder tomar una fuente y extraer las alturas de ascenso y descenso de esa fuente. Esto permitirá a los clientes ubicar el texto con mayor precisión. Soy consciente de que puedo cambiar dónde se dibuja el texto estableciendo el atributo textBaseline, pero en realidad necesito los valores numéricos que describen estas alturas diferentes. ¿Hay una manera simple de hacer esto? Si no, ¿hay una biblioteca (afortunadamente ligera) que pueda manejarlo por mí? La mayoría de las soluciones propuestas que he encontrado son bibliotecas de renderizado de fuentes pesadas, lo que parece una sobrecarga masiva para este problema.Obteniendo métricas de fuentes en JavaScript?

+0

de Mozilla Bespin tratado de resolver ese problema y finalmente ejecutar en discusión que terminó con el lienzo conclusión fue y nunca será diseñado para editores de texto. Por lo tanto, confíe en que 'm' tenga la misma altura y ancho o utilice la fuente de Bespin o el método de prueba de píxeles que se describe a continuación o mida un div off con el mismo texto/fuente o cualquier otra aproximación no confiable. Disculpa, no me gusta la desilusión, también. Pero, ¿estás seguro de que elegiste el caballo correcto para este camino? – noiv

+0

Actualmente estoy trabajando en una implementación de JVM en JavaScript y estoy usando el lienzo como un objetivo de representación. Necesito implementar las bibliotecas de fuentes Java, por lo que necesito estos valores precisos. Estoy pensando que voy a seguir con la respuesta de Simon y simplemente simular la implementación escribiendo fuera de la pantalla y raspando los resultados. :-( – templatetypedef

+0

Espero que haya considerado el suavizado de fuentes .... – noiv

Respuesta

4

This article en HTML5 tipográficas métricas discute el problema y una part solution using CSS - aunque el redondeo entero de offsetTop etc es un problema (potencialmente pueden utilizar getBoundingClientRect() para obtener valores de punto flotante adecuados para algunos navegadores).

4

La respuesta corta es que no hay un camino integrado y usted está por su cuenta.

Debido a esto, la mayoría de la gente simplemente los estima. Algunas personas calculan previamente todos los valores, lo cual no es demasiado trabajo, siempre que use solo unas pocas fuentes.

La tercera forma es hacer un lienzo en la memoria e imprimir algunas letras (por ejemplo, un Q y un O) e intentar programar el ascenso y el descenso utilizando la colisión por píxel. Es un problema y puede ser lento dependiendo de la cantidad de fuentes y de la precisión que desee, pero es la forma más precisa de hacerlo si no desea calcular previamente los valores.

Cuestiones relacionadas