5

我有一個文字說「我做得很好」。我想把這段文字放在我生成的可愛背景上。 我想將"I am doing great"放在系統中的圖像"image.jpg"上。 文本的起點應該是X,y(以像素爲單位)。使用imagemagik/PIL在python中的圖像上添加文本

我嘗試下面的代碼片段,但我有錯誤: 段:

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

有任何解決方法,我可以嘗試?

回答

1

看的text方法the ImageDraw module(上谷歌命中「PIL文本」。)您還需要在ImageFont模塊,它帶來了相關的例子代碼:

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

這提到如何繪製,而不是如何寫文本。你想畫信嗎?我不用typographicfy使用pil。 – user993563 2012-02-14 12:34:51

+3

恐怕我真的不明白將圖像繪製到圖像上並將文本寫入圖像的區別。 – badp 2012-02-14 12:38:25

+0

更新,請chk編輯部分。 – user993563 2012-02-14 13:30:23

4

我遇到了同樣的bug ,它似乎是Pil /枕頭和PNG調色板處理中的一個錯誤。解決方法是在繪製文本之前將圖像轉換爲RBG:

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

謝謝!我在同樣的問題(或非常類似的問題)中掙扎,並且轉換圖像的技巧。 – jlliagre 2015-06-24 21:32:09

+0

像一個魅力工作! – repzero 2016-06-30 02:23:39