PIL PIL отбивает верхнюю часть моего draw.text - PullRequest
1 голос
/ 20 февраля 2012

Я использую Python и PIL, чтобы нарисовать текст.Я наткнулся на определенное руководство, потому что мне нужно было несколько советов о том, как центрировать текст в определенных пределах:

код работает, но у него странное поведение.Это ест вершину строки.Вот как должно выглядеть http://img855.imageshack.us/img855/9292/qttempya4744.png

, а вот как это выглядит http://img546.imageshack.us/img546/8541/outn.jpg

вот мой код:

import os
from PIL import ImageDraw, ImageFont, Image
def draw_text(text, size, fill=None):
    font = ImageFont.truetype('C:\exl.ttf', 30)
    size = font.getsize(text)# Returns the width and height of the given text, as a 2-tuple.
    size = (size[0],size[1]+15)
    im = Image.new('RGBA', size, (0, 0, 0, 0)) # Create a blank image with the given size
    draw = ImageDraw.Draw(im)
    draw.text((0, 25), text, font=font, fill=fill) #Draw text
    return im

img = draw_text('zod', 30, (82, 124, 178))
img.save('C:\out.jpg',"JPEG")
print 'Complete!'
os.startfile('C:\out.jpg')

У меня есть эта ошибка и с другими шрифтами (пробовал Arial и Verdana).помогите плз:)

1 Ответ

2 голосов
/ 21 февраля 2012

Мне удалось это исправить.Похоже, что у drawtext есть некоторые проблемы с определенными размерами шрифта.Я немного поэкспериментировал, и здесь отчетливо видно, что у некоторых размеров шрифта верх отрублен http://img838.imageshack.us/img838/7677/pilfontsize.jpg

Код для тестирования выше:

from PIL import ImageDraw, ImageFont, Image

im = Image.new('RGBA', (700, 1600), (0, 0, 0, 0)) 
fSize = 1
yVal = 1

while fSize <= 50:
    font = ImageFont.truetype('arial.ttf', fSize)
    fString = "This line is in Arial font size " + str(fSize)
    size = font.getsize(fString)
    draw = ImageDraw.Draw(im)
    draw.text((5, yVal), fString, font=font, fill=None)
    fSize += 1
    yVal += fSize + 5

В любом случаеЯ сделал это, и я горжусь: D Эта проблема рендеринга должна быть решена разработчиками PIL.

...