А именно: блокнот открыт, шрифт выбран как Arial, размер 11, слова это просто тест тщательно введены, сделан снимок экрана:
Вводится и запускается следующий код Python:
import ImageFont, ImageDraw, Image
im = Image.open("c:/textimg.png") #the above image
pilfont = ImageFont.truetype("arial.ttf", 11)
compimg = Image.new("RGB", im.size, (255, 255, 255))
draw = ImageDraw.Draw(compimg)
draw.text((0,0), "this is just a test", (0,0,0), font=pilfont)
compimg.save("c:/compimg.png")
Однако результат разочаровывает:
Он не только неправильного размера, но и слегка затемнен, в то время как рендеринг в блокноте четкий и не выходит за границы пикселей.
Как я могу заставить его отображать, как блокнот? У меня была точно такая же проблема с pygame, поэтому я думаю, что мне здесь не хватает фундаментального понимания TTF.
ОБНОВЛЕНИЕ: я снова попробовал это с pygame. Он делает то же самое. У него есть возможность отключить сглаживание, но похоже, что он просто отсекает любые пиксели, которые были бы сглажены, на основе некоторого порога. Самое близкое приближение, которое я получил, это размер 15. Код был таким:
pygfont = pygame.font.Font(r"c:\windows\fonts\arial.ttf", 15)
surf = pygfont.render("this is just a test", False, (0,0,0), (255,255,255))
pygame.image.save(surf, r"c:\pygameimg.png")
и результат (оригинал блокнота сверху для сравнения):
http://tinypic.com/images/404.gif
Гах, почему я не могу сразу предложить награду?
ОБНОВЛЕНИЕ: здесь сравниваются все методы:
PIL 15, затем блокнот 11, затем сглаживание pygame 15 выключено, затем сглаживание pygame 15 включено.
PIL 15 на самом деле имеет правильные пропорции, он просто сглажен. Итак: почему 15 против 11? как сделать так же, как в винде? (и что делает pygame?)