2010-04-20 4 views
3

J'ai une police TrueType personnalisée (TTF) qui se compose d'un groupe d'icônes, que je voudrais rendre en tant que bitmaps individuels (GIF, PNG, peu importe) pour une utilisation sur le Web. Vous pensez que c'est une tâche simple, mais apparemment pas? Il y a un énorme tas de logiciels liés TTF-ici:Dump caractères (glyphes) de la police TrueType (TTF) en bitmaps

http://cg.scs.carleton.ca/~luc/ttsoftware.html

Mais il est tous les niveaux variables de « pas tout à fait ce que je veux », des liens brisés et/ou difficile à impossible de compiler sur une boîte Ubuntu moderne -- par exemple. dumpglyphs (C++) et ttfgif (C) tous deux ne parviennent pas à compiler en raison de obscures dépendances manquantes. Des idées?

Répondre

5

Essayez PIL « s ImageDraw et ImageFont Module

code serait quelque chose comme ça

import Image, ImageFont, ImageDraw 

im = Image.new("RGB", (800, 600)) 

draw = ImageDraw.Draw(im) 

# use a truetype font 
font = ImageFont.truetype("path/to/font/Arial.ttf", 30) 

draw.text((0, 0), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", font=font) 

# remove unneccessory whitespaces if needed 
im=im.crop(im.getbbox()) 

# write into file 
im.save("img.png") 
+0

Merci! Cela fonctionne magnifiquement, j'ai ajouté une version légèrement modifiée en tant que réponse séparée. – jpatokal

-1

utiliser certains logiciels d'imagerie comme le Gimp pour afficher tous les caractères qui vous intéressent, puis enregistrez chaque un à un fichier. Pas rapide ou efficace, mais vous savez ce que vous obtiendrez.

2

est ici une implémentation fonctionnelle de la réponse de Saint Marc qui déverse sur a 'caractères à « z » en noir dans PNGs correctement taille:

import Image, ImageFont, ImageDraw 

# use a truetype font 
font = ImageFont.truetype("font.ttf", 16) 
im = Image.new("RGBA", (16, 16)) 
draw = ImageDraw.Draw(im) 

for code in range(ord('a'), ord('z') + 1): 
    w, h = draw.textsize(chr(code), font=font) 
    im = Image.new("RGBA", (w, h)) 
    draw = ImageDraw.Draw(im) 
    draw.text((-2, 0), chr(code), font=font, fill="#000000") 
    im.save(chr(code) + ".png") 
2

Une plus concise et la version plus fiable de l'autre réponses (qui coupent les parties de certains glyphes pour moi):

import string 

from PIL import Image, ImageFont 


point_size = 16 
font = ImageFont.truetype("font.ttf", point_size) 

for char in string.lowercase: 
    im = Image.Image()._new(font.getmask(char)) 
    im.save(char + ".bmp") 

Je serais intéressé de savoir s'il y a une meilleure façon de construire une image PIL de l'objet ImagingCore que font.getmask() de retour.

+0

Notez que cela crée des images .bmp (ce dont j'avais besoin) mais les méthodes de conversion d'image de PIL pourraient être utilisées pour obtenir d'autres formats d'image. – jbg

Questions connexes