Estoy generando una imagen SVG en python (puro, sin libretas externas aún). Quiero saber cuál será el tamaño de un elemento de texto antes de colocarlo correctamente. ¿Alguna buena idea de cómo hacerlo? Revisé pysvg biblioteca, pero no vi nada como getTextSize()obtener el tamaño del texto svg en python
Respuesta
Esto puede ser ser bastante complicado. Para empezar, deberá familiarizarse con chapter on text de la especificación SVG. Suponiendo que se desea obtener el ancho de llanura text
elementos, y no textpath
elementos, como mínimo habría que:
- analizar el font selection properties, spacing properties y leer el attibute
xml:space
, así como la propiedadwriting-mode
(también puede ser de arriba hacia abajo en lugar de solo de izquierda a derecha y de derecha a izquierda). - Basado en lo anterior, abra la fuente correcta y lea los datos de glifos y extraiga los anchos y alturas de los glifos en su cadena de texto. Solo encontrar la fuente puede ser una gran tarea, ver los múltiples lugares donde pueden esconderse los archivos de fuentes.
- (opcionalmente) Mire a través de la cadena para posible ligatures (dependiendo del idioma), y reemplácelos con el glifo correcto si existe en la fuente.
- Agregue los anchos para todos los caracteres y espacios, el último dependiendo de las propiedades de espaciado y (opcionalmente) posibles kerning pares.
Una posible solución sería utilizar la biblioteca pango. Puede encontrar enlaces de python para él en py-gtk. Lamentablemente, a excepción de algunos examples, la documentación para los enlaces de python es bastante escasa. Pero se ocuparía de los detalles de la carga de la fuente y de determinar las extensiones de un Layout
.
Otra forma es estudiar el renderizador SVG en su navegador. Pero, p. el soporte para el texto SVG en Firefox es limited.
También es instructivo estudiar cómo TeX lo hace, especialmente el concept (pdf) de las cajas (por letras) y pegamento (para el espaciado).
Tenía exactamente el mismo problema, pero tenía una fuente de ancho variable. Lo resolví tomando el elemento de texto (fuente y contenido correctos) que quería, lo escribí en un archivo svg y usé Inkscape instalado en mi PC para renderizar el dibujo en un archivo png temporal. Luego leí las dimensiones del archivo png (extraído del encabezado), eliminé los archivos svg y png de temperatura y usé el resultado para colocar el texto donde quería y los elementos que lo rodeaban.
Encontré que la representación en un dibujo, usando un DPI de 90 parecía darme los números exactos que necesitaba, o los números nativos usados en svgwrite como un todo. -D es la bandera que se debe usar para que solo se represente el elemento dibujable, es decir, el texto.
os.cmd(/cygdrive/c/Program\ Files\ \(x86\)/Inkscape/inkscape.exe -f work_temp.svg -e work_temp.png -d 90 -D)
que utilizan estas funciones para extraer los números png, que se encuentran en este link, tenga en cuenta la mina se corrige ligeramente para python3 (sigue trabajando en python2)
def is_png(data):
return (data[:8] == b'\x89PNG\r\n\x1a\n'and (data[12:16] == b'IHDR'))
def get_image_info(data):
if is_png(data):
w, h = struct.unpack('>LL', data[16:24])
width = int(w)
height = int(h)
else:
raise Exception('not a png image')
return width, height
if __name__ == '__main__':
with open('foo.png', 'rb') as f:
data = f.read()
print is_png(data)
print get_image_info(data)
Es torpe, pero funcionó
- 1. Obtener el tamaño del monitor en python
- 2. SVG obtener ancho de elemento de texto
- 3. ¿Cómo cambiar el tamaño del texto en svg de forma dinámica?
- 4. Alineando texto en SVG
- 5. python - tamaño del iterador invocable?
- 6. ¿Cambiar el tamaño de SVG en html?
- 7. python. obtener el tamaño de un objeto
- 8. PhpStorm tamaño del texto
- 9. Obtener el tamaño del puntero en C
- 10. ¿Cómo cambiar el tamaño del texto según el tamaño del widget en una vista de texto en un appwidget?
- 11. python, matplotlib, svg e hipervínculos en etiquetas de texto
- 12. Obtener tamaño de los gráficos SVG mediante javascript
- 13. Obtener tamaño de archivo en Python?
- 14. Obtener el tamaño del sistema RAM
- 15. PIL cómo escalar el tamaño del texto en relación con el tamaño de la imagen
- 16. Cómo obtener el tamaño del archivo HttpPostedFileBase
- 17. Escala Tamaño del texto en un TextView
- 18. Obtener el tamaño del archivo en el disco
- 19. Maximizar el tamaño del texto del botón de Android
- 20. SVG, texto, fuente con anchura/altura fija
- 21. ¿Cómo obtener ScrollBars en SVG?
- 22. cómo obtener el tamaño del archivo tar.gz en (MB) en python
- 23. Tamaño máximo del tipo de datos "TEXTO" en postgresql
- 24. cambiar el tamaño del texto (tamaño de fuente) al cambiar el tamaño de la ventana?
- 25. Cambiar el tamaño del texto en un UIButton
- 26. Cómo cambiar el tamaño del texto de correlación en ggpairs()
- 27. ¿Cómo puedo cambiar el tamaño del texto en RemoteViews
- 28. Cómo aumentar el tamaño del texto en SoapUI
- 29. ¿Cómo obtener un efecto de contorno en el texto en SVG?
- 30. Calcular el tamaño del texto de acuerdo con el ancho del área de texto