2016-01-04 20 views
6

DÜZENLEME: ilave çalışan bir örnekPython görüntü kütüphanesi - tipi konum

aşağıdaki program:

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 50 
filename = 'font_test.png' 
font="/usr/share/fonts/truetype/msttcorefonts/arial.ttf" 
text="5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE), color="grey") 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(font, 40) 
font_width, font_height = font.getsize(text) 
draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0), text, font=font, fill="red") 
image.save(filename, "PNG") 

Bu, aşağıdaki görüntüsü üretir:

enter image description here

Bu PIL kütüphanesi yazılırken üst kısımda bir miktar marj katar gibi görünüyor. Bu marj, kullandığım yazı tipine göre değişir.

Metni konumlandırmaya çalışırken bunu nasıl dikkate alabilirim (dikdörtgenin ortasında olmasını isterim)? (Ubuntu 14.04 üzerinde Yastık 2.3.0 ile Python 2.7.6 Kullanılması)

+1

Lütfen "import" ifadeleri de dahil olmak üzere hatayı gösteren bir ** complete ** programı belirtin. –

+1

Açık Sans'ın orantılı figürleri kullanması durumunda hayal edebileceğimin tek aklı nedeni, bu durumda, marjın x-yüksekliği ve yükseliş arasındaki fark olacağını, ki bu durumda orada olması gerekiyordu. Daha az akli nedeni, bir nedenden ötürü, PIL'de bir metin çalışmasının büyüklüğünün ona bir çeşit “ofset” eklenmesidir: https://pillow.readthedocs.org/en/3.0.x/_modules/PIL /ImageFont.html. Belki de gördüğünüz fark bu mu? Siyah dikdörtgenin neden bütün harfin arkasında uzanmadığını açıklayamazdım. – millimoose

+0

Tam çalışma örneği eklendi. – Filip

cevap

5

Nedenini anlıyorum ama y koordine gelen font.getoffset(text)[1] çıkarılarak bilgisayarımda bu giderir yoktur.

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 100 
filename = 'font_posn_test.png' 
fontname = '/usr/share/fonts/truetype/msttcorefonts/arial.ttf' 
textsize = 40 
text = "5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE)) 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(fontname, textsize) 
print font.getoffset(text) 
print font.font.getsize(text) 
font_width, font_height = font.getsize(text) 

font_y_offset = font.getoffset(text)[1] # <<<< MAGIC! 

draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0 - font_y_offset), text, font=font, fill="red") 
image.save(filename, "PNG") 
+0

Bu benim sorunumu çözdü! Teşekkürler :) – Filip