добавление текста поверх изображения в python с использованием imagemagik / PIL - PullRequest
5 голосов
/ 14 февраля 2012

У меня есть сообщение: «У меня все отлично». Я хочу поместить этот текст на прекрасный фон, который я создал. Я хочу поместить "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

Есть ли какое-нибудь решение, которое я могу попробовать?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2015

Я столкнулся с этой же ошибкой, похоже, это ошибка в Pil / Pillow с обработкой палитры PNG.Обходной путь должен преобразовать ваше изображение в RBG перед рисованием текста:

img = img.convert('RGB')
1 голос
/ 14 февраля 2012

Посмотрите на метод text модуля ImageDraw (топ Google попал под "текст текста"). Вам также понадобится модуль ImageFont, какой спортивный соответствующий пример кода:

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