5

Mam tekst powiedzieć "I'm doing great". Chcę umieścić ten tekst na pięknym tle, które wygenerowałem. Chcę umieścić "I am doing great" na obrazie "image.jpg" obecny w systemie. Punktem początkowym tekstu powinien być X, y w pikselach.Dodawanie tekstu na obrazie w python za pomocą imagemagik/PIL

Próbowałem poniższy urywek, ale mam błąd: Snippet:

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") 

Błąd:

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' 

wydaje się być błąd w PIL: http://grokbase.com/t/python/image-sig/114k20c9re/perhaps-bug-report

Czy istnieje jakiekolwiek obejście mogę spróbować?

Odpowiedz

1

Spójrz na metody textthe ImageDraw module (top Google hit dla 'text pil'). Trzeba także moduł ImageFont, który sportowych odpowiedni kod przykładowy:

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

wspomina, jak rysować, a nie jak pisać tekst. Czy chciałbyś narysować litery? Nie jestem typograficzny używając pil. – user993563

+3

Obawiam się, że tak naprawdę nie rozumiem rozróżnienia między rysowaniem tekstu na obraz i pisaniem tekstu na obrazie. – badp

+0

aktualizacja, proszę chk edytować część. – user993563

4

wpadłem na ten sam błąd , wydaje się, że jest to błąd w Pil/Pillow z obsługą palety PNG. Obejście problemu polega na przekształceniu obrazu na RBG przed rysowaniem tekstu:

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

Dzięki! Walczyłem z tym samym (lub bardzo podobnym) problemem, a konwersja obrazu rozwiązała problem. – jlliagre

+0

pracował jak czar !! – repzero

Powiązane problemy