tôi sử dụng hai phương pháp sau đây để tạo ra hình ảnh xem trước văn bản cho một tập tin phông chữ .ttfImageFont's getize() không nhận được kích thước văn bản chính xác?
phương pháp PIL:
def make_preview(text, fontfile, imagefile, fontsize=30):
try:
font = ImageFont.truetype(fontfile, fontsize)
text_width, text_height = font.getsize(text)
img = Image.new('RGBA', (text_width, text_height))
draw = ImageDraw.Draw(img)
draw.text((0, 0), text, font=font, fill=(0, 0, 0))
return True
except:
return False
ImageMagick phương pháp:
def make_preview(text, fontfile, imagefile, fontsize=30):
p = subprocess.Popen(['convert', '-font', fontfile, '-background',
'transparent', '-gravity', 'center', '-pointsize', str(fontsize),
'-trim', '+repage', 'label:%s' % text, image_file])
return p==0
Cả hai phương pháp tạo ra hình ảnh xem trước chính xác hầu hết thời gian nhưng trong một số trường hợp hiếm hoi (< 2%), font.getsize (văn bản) chỉ cann ot nhận được kích thước văn bản chính xác dẫn đến canvas được cung cấp tràn văn bản. ImageMagick có cùng một vấn đề.
phông chữ mẫu và xem trước:
HANFORD.TTF http://download.appfile.com/HANFORD.png
NEWTOW.TTF http://download.appfile.com/NEWTOW.png
MILF.TTF http://download.appfile.com/MILF.png
SWANSE.TTF http://download.appfile.com/SWANSE.png
Tôi đã xem xét tài liệu của ImageMagick và tìm thấy giải thích về vấn đề này tại http://www.imagemagick.org/Usage/text/#overflow.
Có thể phát hiện các luồng văn bản như vậy và vẽ văn bản để vừa với canvas như chúng tôi mong đợi không?
@Pekka, phương pháp của bạn có thể hoạt động với IM nhưng sẽ tạo ra chi phí lớn, không chỉ cắt mà còn thay đổi kích thước hình ảnh đã cắt để vừa với kích thước canvas được chỉ định. Điều này không làm việc với PIL. Nó luôn luôn rút ra một nửa trên của các phông chữ trên thậm chí tôi tạo ra một khung lớn hơn. – jack
Thử đặt lệnh "nhãn" * trước * các lệnh cắt và sửa đổi, điều đó sẽ hoạt động. Các chi phí, tôi không thể giúp đỡ. –