es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar automáticamente fuentes en cursiva a partir de una tipografía dada.

Actualmente estoy construyendo un script de FontForge que convierte el conjunto de fuentes Cantarell para su uso en webfonts. Sin embargo, Cantarell no tiene versiones oblicuas/itálicas de las fuentes, y prefiero generarlas automáticamente a través de FontForge. Intenté usar “foreach” para seleccionar todos los glifos y “Italic()” para generar versiones itálicas para cada uno de los glifos. Sin embargo, los resultados siguen siendo los mismos que las fuentes originales.

#!/usr/bin/fontforge

FONT_NAME = "Cantarell"
VARIANTS = ["Bold", "ExtraBold", "Light", "Regular", "Thin"]
i = 0

while (i < SizeOf(VARIANTS))
  FILE_NAME = "fonts/" + FONT_NAME + "-" + VARIANTS[i] + ".otf"
  FILE_NAME_ITALIC = "fonts/" + FONT_NAME + "-" + VARIANTS[i] + "Italic.otf"
  Print(FILE_NAME)
  Open(FILE_NAME)
  Generate(FILE_NAME:r + ".svg")
  Generate(FILE_NAME:r + ".eot")
  Generate(FILE_NAME:r + ".ttf")
  Generate(FILE_NAME:r + ".woff")
  Generate(FILE_NAME:r + ".woff2")
  foreach
    Italic()
  endloop
  Generate(FILE_NAME_ITALIC)
  Generate(FILE_NAME_ITALIC:r + ".svg")
  Generate(FILE_NAME_ITALIC:r + ".eot")
  Generate(FILE_NAME_ITALIC:r + ".ttf")
  Generate(FILE_NAME_ITALIC:r + ".woff")
  Generate(FILE_NAME_ITALIC:r + ".woff2")
  i = i + 1
endloop

Descripción de la imagen

Notas:

  • Sé que necesito cambiar los metadatos de las fuentes itálicas para usar en TrueType y OpenType. Sin embargo, aún necesito resolver este problema.
  • Los archivos OTF originales no están disponibles directamente en https://gitlab.gnome.org/GNOME/cantarell-fonts/ (todavía debe compilarlos manualmente). Sin embargo, están fácilmente disponibles extrayendo los paquetes precompilados (por ejemplo, en el archivo DEB de Debian).
  • Google Fonts distribuye una versión mucho más antigua de Cantarell y son feas, por lo que decidí hacer este script como una alternativa moderna.
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con la generación de versiones oblicuas/cursivas de las fuentes Cantarell utilizando la función Italic() de FontForge parece ser que solo aplica una inclinación a los glifos sin cambiar sus anchos. Esto resulta en un efecto oblicuo en lugar de un verdadero estilo cursiva. Para resolver este problema, puedes intentar usar la función Simplify() de FontForge después de la función Italic() para ajustar los anchos de los glifos y crear un estilo cursiva adecuado.

    Aquí tienes un ejemplo de cómo puedes modificar el script para generar versiones cursivas de las fuentes Cantarell utilizando las funciones Italic() y Simplify():

    #!/usr/bin/fontforge
    FONT_NAME = "Cantarell"
    VARIANTS = ["Bold", "ExtraBold", "Light", "Regular", "Thin"]
    i = 0
    
    while (i < SizeOf(VARIANTS))
      FILE_NAME = "fonts/" + FONT_NAME + "-" + VARIANTS[i] + ".otf"
      FILE_NAME_ITALIC = "fonts/" + FONT_NAME + "-" + VARIANTS[i] + "Italic.otf"
      Print(FILE_NAME)
      Open(FILE_NAME)
      Generate(FILE_NAME:r + ".svg")
      Generate(FILE_NAME:r + ".eot")
      Generate(FILE_NAME:r + ".ttf")
      Generate(FILE_NAME:r + ".woff")
      Generate(FILE_NAME:r + ".woff2")
      foreach
        Italic()
        Simplify(1, 0, 0, 0)
      endloop
      Generate(FILE_NAME_ITALIC)
      Generate(FILE_NAME_ITALIC:r + ".svg")
      Generate(FILE_NAME_ITALIC:r + ".eot")
      Generate(FILE_NAME_ITALIC:r + ".ttf")
      Generate(FILE_NAME_ITALIC:r + ".woff")
      Generate(FILE_NAME_ITALIC:r + ".woff2")
      i = i + 1
    endloop
    

    La función Simplify() toma cuatro argumentos (todos números): el primero controla cuánto se reduce la dimensión x del glifo, el segundo controla cuánto se reduce la dimensión y, el tercero controla cuánto se reduce el ancho del trazo horizontal del glifo y el cuarto controla cuánto se reduce el ancho del trazo vertical del glifo. En el ejemplo anterior, solo estamos reduciendo el ancho del trazo horizontal (el tercer argumento) estableciéndolo en 1 y el resto en 0. Puedes experimentar con diferentes valores para encontrar el equilibrio correcto entre inclinación y ajuste de ancho.

    Recuerda que aún necesitarás actualizar los metadatos de las fuentes cursivas para usar en formatos TrueType y OpenType. Esto implica establecer los campos post.italicAngle y post.italicAngle en el diccionario Private de la fuente. Puedes usar las funciones incorporadas de FontForge o escribir un script para automatizar este proceso.

Comments are closed.