2010-02-10 31 views
1

我想繪製一些圖像到imagea。問題是我希望每個字符串都顯示在每個圖像的中間。我該怎麼做?或者我怎麼知道字符串的像素長度(給出字體的字體)? 謝謝使用PIL將文本繪製到圖像的中心

回答

2

PIL字體的確有一個getsize方法,你可以用它來獲取字體的寬度和高度,你嘗試過嗎? 例如

from PIL import Image, ImageDraw, ImageFont 

fontFile = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf" 
font = ImageFont.truetype(fontFile, 10) 
text="anurag" 
print font.getsize(text) 
assert font.getsize(text)[0]*2 == font.getsize(text*2)[0] 
2

你可以找到http://tools.jedutils.com/tools/center-text-image

的這一個實現你可以使用該頁面創建的圖像就在那裏,而不是自己實施的常規,但代碼包含在頁面上了。

繼妮可的勸告

from PIL import Image, ImageDraw, ImageFont, ImageFilter 
import StringIO 

filter_dict = { 
    'BLUR' : ImageFilter.BLUR, 
    'CONTOUR' : ImageFilter.CONTOUR, 
    'DETAIL' : ImageFilter.DETAIL, 
    'EDGE_ENHANCE' : ImageFilter.EDGE_ENHANCE, 
    'EDGE_ENHANCE_MORE' : ImageFilter.EDGE_ENHANCE_MORE, 
    'EMBOSS' : ImageFilter.EMBOSS, 
    'FIND_EDGES' : ImageFilter.FIND_EDGES, 
    'SMOOTH' : ImageFilter.SMOOTH, 
    'SMOOTH_MORE' : ImageFilter.SMOOTH_MORE, 
    'SHARPEN' : ImageFilter.SHARPEN 
} 

def get_font_full_path(font_path,font_name): 
    ext = '.TTF' if font_name.upper() == font_name else ".ttf" 
    return font_path + font_name + ext 

def create_image(font_name, font_size, font_color, width, height, back_ground_color, text, img_type="JPEG", image_filter=None): 
    font_full_path = get_font_full_path(font_path,font_name) 
    font = ImageFont.truetype (font_full_path, font_size) 

    im = Image.new ("RGB", (width,height), back_ground_color) 
    draw = ImageDraw.Draw (im) 
    text_x, text_y = font.getsize(text) 
    x = (width - text_x)/2 
    y = (height - text_y)/2 
    draw.text ((x,y), text, font=font, fill=font_color) 

    if image_filter: 
     real_filter = filter_dict[image_filter] 
     im = im.filter(real_filter) 
    im.save ("sample.jpg", format=img_type) 

`

+0

這是有幫助的也總結情況下,實現您已鏈接到該網站宕機。 – 2013-09-14 23:59:30