python svg true-type-fonts fontforge

python - Importe una secuencia de archivos.svg en FontForge como glifos y genere un archivo de fuente



true-type-fonts (1)

Intenta reconstruir tu Fonforge. Porque el código debería funcionar. Lo probé y funciona bien.

Instalé correctamente Fontforge con la extensión de Python con Homebrew . Esta es la información:

allcaps$ brew info fontforge fontforge: stable 20120731, HEAD http://fontforge.org/ /usr/local/Cellar/fontforge/20120731 (377 files, 16M) * Built from source with: --with-x From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/fontforge.rb ==> Dependencies Required: gettext ✘, fontconfig ✔ Recommended: jpeg ✔, libtiff ✔ Optional: cairo ✔, pango ✘, libspiro ✘, czmq ✘ ==> Options --with-cairo Build with cairo support --with-czmq Build with czmq support --with-gif Build with GIF support --with-libspiro Build with libspiro support --with-pango Build with pango support --with-x Build with X11 support, including FontForge.app --without-jpeg Build without jpeg support --without-libpng Build without libpng support --without-libtiff Build without libtiff support --without-python Build without python support --HEAD install HEAD version ==> Caveats Set PYTHONPATH if you need Python to find the installed site-packages: export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH .app bundles were installed. Run `brew linkapps` to symlink these to /Applications.

Establecer PYTHONPATH
Ejecute brew install fontforge por supuesto con todos los indicadores que necesita.
Ejecutar brew linkapps

ACTUALIZAR

Comience con una fuente vacía para que la fuente no sea el problema:

import fontforge font = fontforge.font() # create a new font

Para incluir un glyphlist (no debería ser necesario) Descargue: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt y luego:

import fontforge fontforge.loadNamelist(''glyphlist.txt'') # load a name list ...

Crea el glifo por punto de código. createChar(uni[,name]) ''A'' es 65 entonces

char = font.createChar(65)

Glifos y sus puntos de código:

>>> for c in u''ABC 賢治'': print ord(c). >>> 65, 66, 67, 32, 36066, 27835.

El Consorcio Unicode define el estándar Unicode. Los ''CJK Unified Ideographs'' viven en ''Basic Multilingual Plane (BMP)''.

Los glifos sin punto unicode se pueden referenciar dentro de una fuente por nombre. Y son útiles para las características de tipo abierto o bloques de construcción para componer nuevos glifos. Puedes crearlos así:

font.createChar(-1, ''some_name'')

ACTUALIZACIÓN 2

Debe nombrar todos los glifos que aparecen en la Lista de glifos de Adobe por su nombre de glifo AGL. El resto de los glifos se denominarán uniXXXX donde XXXX es el índice Unicode. Durante el desarrollo puede usar cualquier nombre legible para humanos. Así que use su propio nombre y reemplácelo cuando genere la fuente para el envío. Ver Typophile .

Quiero crear una fuente con un gran volumen de glifos. Piensa kanji japonés, en miles. Por lo tanto, definitivamente se requerirá algún procesamiento de scripting / batch. ¡Afortunadamente FontForge soporta scripts de python! Desafortunadamente no he podido hacerlo funcionar. [cara triste]

En primer lugar, gracias al usuario Hoff por publicar código aquí que respondió una gran parte de mi pregunta. Pero al ejecutar su script me encuentro con problemas que plantean más preguntas:

Failed to find NameList: AGL For New Fonts Warning: Font contained no glyphs

Actualizaciones:

  • El error "fuente sin glifos" es aparentemente un error en FontForge que ocurre cuando la fuente contiene uno o menos glifos. Agregar un segundo glifo ''B'' resolvió esto.
  • Encontré que se puede usar la misma sintaxis ya sea para guardar .ttf .sfd .otf, etc.
  • La falla de NameList en realidad no impide que se escriba el archivo de fuente. Estuve feliz de descubrir esto, pero todavía no entiendo cómo proporcionar la Lista de Nombres que quiere.

Aquí está el código de Hoff:

import fontforge font = fontforge.open(''blank.sfd'') glyph = font.createMappedChar(''A'') glyph.importOutlines(''sourceimg.svg'') font.generate(''testfont.ttf'')

Después de cinco horas de luchas ayer con la construcción de FontForge (un proceso confuso en una Mac). Parece que lo tengo funcionando correctamente. Al principio, instalé una versión pre-construida de .dmg solo para encontrar que carecía de soporte de Python. Pero dado que Hoff parecía no encontrar el mismo error que yo, no estoy descartando un problema de compilación.

De cualquier manera, no entiendo el error que implica AGL. Que es AGL? Lo busqué : "Adobe Glyph List: una convención de nomenclatura de glifos estándar". Parece que FontForge intentó asignar valores Unicode a nombres de glifos y no pudo.

Entonces, ¿por qué el problema AGL NameList? Gracias de antemano por cualquier ayuda.