Размер текстовой строки на «холсте» (в пикселях) определяю через ctx.text_extents(s_text)[2:4]. Но тупая печать: ctx.move_to(0,H) - не проходит - текст вылазит за границы «холста». В чём ошибка? Как исправить? Для отладочных целей я увеличил холст (см. +16, +16).
#!/usr/bin/python
import cairo
import sys
argc = len(sys.argv)
if (argc < 4): sys.exit()
font_face = sys.argv[1]
filename_o = sys.argv[2]
s_text = sys.argv[3]
size = int(sys.argv[4])
W = 0
H = 0
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
ctx = cairo.Context(surface)
ctx.select_font_face(font_face)
ctx.set_font_size(size)
w, h = ctx.text_extents(s_text)[2:4]
W = int(w)
H = int(h)
print w,h
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, W+16, H+16)
ctx = cairo.Context(surface)
ctx.select_font_face(font_face)
ctx.set_font_size(size)
ctx.move_to(0,H)
ctx.text_path(s_text)
ctx.fill()
surface.write_to_png(filename_o)
./pycrtext "Libertine" output.png "abcdefghijklmnopqrtsuvwxyz" 32