5

Tengo un mensaje de texto que dice "Lo estoy haciendo bien". Quiero poner este texto sobre un fondo precioso que he generado. Quiero poner "I am doing great" sobre una imagen "image.jpg" presente en el sistema. El punto de partida del texto debe ser X, y en píxeles.agregando un texto sobre una imagen en python usando imagemagik/PIL

probé el siguiente fragmento, pero estoy teniendo errores: Fragmento:

import PIL 
from PIL import ImageFont 
from PIL import Image 
from PIL import ImageDraw 

font = ImageFont.truetype("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf",40) 
text = "Sample Text" 
tcolor = (255,0,0) 
text_pos = (100,100) 

img = Image.open("certificate.png") 
draw = ImageDraw.Draw(img) 
draw.text(text_pos, text, fill=tcolor, font=font) 
del draw 

img.save("a_test.png") 

error:

Traceback (most recent call last): 
    File "img_man.py", line 13, in <module> 
    draw.text(text_pos, text, fill=tcolor, font=font) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageDraw.py", line 256, in text 
    ink, fill = self._getink(fill) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImageDraw.py", line 145, in _getink 
    ink = self.palette.getcolor(ink) 
    File "/usr/local/lib/python2.7/dist-packages/PIL/ImagePalette.py", line 62, in getcolor 
    self.palette = map(int, self.palette) 
ValueError: invalid literal for int() with base 10: '\xed' 

parece que hay un error en el PIL: http://grokbase.com/t/python/image-sig/114k20c9re/perhaps-bug-report

¿Hay cualquier solución que puedo probar?

Respuesta

1

mirada en el método de textthe ImageDraw module (arriba Google golpeado por "texto pil.) Usted también necesitará el módulo ImageFont, que se divierte código de ejemplo relevante:

import ImageFont, ImageDraw 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype("arial.ttf", 15) 
draw.text((10, 10), "hello", font=font) 
+0

esto menciona cómo dibujar, no cómo escribir texto. ¿Te gustaría dibujar letras? No soy para typograpfy usando pil. – user993563

+3

Me temo que realmente no entiendo la diferencia entre dibujar texto en una imagen y escribir texto en una imagen. – badp

+0

actualización, por favor revisa la parte de edición. – user993563

4

me encontré con este mismo error , parece ser un error en Pil/Pillow con manejo de paleta PNG. La solución es convertir su imagen a RBG antes de dibujar el texto:

img = img.convert('RGB') 
+0

¡Gracias! Estaba luchando con el mismo problema (o uno muy similar) y la conversión de la imagen hizo el truco. – jlliagre

+0

funcionó como un encanto! – repzero

Cuestiones relacionadas