2010-04-20 209 views
3

我有一個自定義的TrueType字體(TTF),它由一組圖標組成,我想將其呈現爲單獨的位圖(GIF,PNG,無論)用於Web上。你會認爲這是一個簡單的任務,但顯然不是?有TTF-相關軟件的一個巨大的擺在這裏:將TrueType字體(TTF)中的字符(字形)轉儲爲位圖

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

但它的各個不同程度的「不完全我想什麼」,斷開的鏈接和/或難以不可能在一個現代的Ubuntu箱編譯 - 例如。 (C++)和ttfgif(C)由於隱藏缺少的依賴關係而無法編譯。有任何想法嗎?

回答

5

嘗試PILImageDrawImageFont模塊

代碼會是這樣的

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

謝謝!這很好用,我添加了一個稍微調整的版本作爲單獨的答案。 – jpatokal 2010-04-20 03:44:11

-1

使用一些圖像處理軟件,如瘸子,以顯示你感興趣的所有字符,然後保存每個一個到一個文件。不快或有效,但你知道你會得到什麼。

2

這裏的S.Mark的答案的工作實現轉儲出字符「a」到黑「Z」到正確大小的PNG:

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

其他的更簡潔,更可靠的版本答案(從而斷絕了一些字形的部分對我來說):

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") 

我很想知道是否有更好的辦法從ImagingCore對象font.getmask()回報構建PIL圖像。

+0

請注意,這會創建.bmp圖像(這是我需要的),但PIL的圖像轉換方法可用於獲取其他圖像格式。 – jbg 2014-07-11 01:17:32