2017-05-01 3 views
1

J'essaie d'écrire du texte sur un png en niveaux de gris en utilisant PIL et en suivant ce fil. Cela semble assez simple mais je ne suis pas sûr de ce que je fais de mal.Impossible d'écrire du texte en niveaux de gris PNG en utilisant PIL et python 2.7

Add Text on Image using PIL

Pourtant, lorsque je tente de le faire mourir sur la fonction draw.text:

from PIL import Image, ImageDraw, ImageFont 
img = Image.open("test.png") 
draw = ImageDraw.Draw(img) 
font = ImageFont.truetype("open-sans/OpenSans-Regular.ttf", 8) 
# crashes on the line below: 
draw.text((0, 0), "Sample Text", (255, 255, 255), font=font) 
img.save('test_out.png') 

Ceci est le journal des erreurs:

"C:\Python27\lib\site-packages\PIL\ImageDraw.py", line 109, in _getink 
ink = self.draw.draw_ink(ink, self.mode) 
TypeError: function takes exactly 1 argument (3 given) 

Quelqu'un peut-il me rappeler la question ?

+0

Il fonctionne pour moi avec Python 2.7.13 et 4.1.0 d'oreiller sur Mac OS, bien que je l'ai 'img = Image.new ("RVB", (300, 300)) 'au lieu d'ouvrir une image existante. Quel est le retraçage complet? Quelle version de Pillow utilisez-vous? – Hugo

+0

@Hugo voir ma réponse. J'ai dû faire du piratage :) – gmmo

Répondre

3

le problème est que le png était une échelle de gris de 8 bits. Pour pouvoir dessiner sur des images 8 bits, je dois utiliser une couleur unique dans l'appel draw.text. En d'autres termes:

# this works only for colored images 
draw.text((0, 0), "Sample Text", (255, 255, 255), font=font) 

# 8-bit gray scale , just pass one value for the color 
# 0 = full black, 255 = full white 
draw.text((0, 0), "Sample Text", (255), font=font) 

ce qu'il est :)