我有一个文字说“我做得很好”。我想把这个文本放在我生成的可爱背景上。
我想将"I am doing great"
放在系统中存在的图像"image.jpg"
上。
文本的起点应为X,y(以像素为单位)。
我尝试了以下代码段,但遇到错误: 片段:
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")
错误:
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'
似乎是PIL中的一个错误: http://grokbase.com/t/python/image-sig/114k20c9re/perhaps-bug-report
我可以尝试一下吗?
答案 0 :(得分:4)
我遇到了同样的错误,它似乎是Pil / Pillow中的PNG调色板处理错误。解决方法是在绘制文本之前将图像转换为RBG:
img = img.convert('RGB')
答案 1 :(得分:1)
查看the ImageDraw
module的text
方法(Google搜索“pil text”的热门内容。)您还需要ImageFont
模块,其中包含相关示例代码:
import ImageFont, ImageDraw
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 15)
draw.text((10, 10), "hello", font=font)