Как рисовать текст под углом, используя PIL Python?

Используя Python, я хочу иметь возможность рисовать текст под разными углами, используя PIL.

Например, представьте, что вы рисуете число вокруг лица часов. Число 3 будет выглядеть так, как ожидалось, тогда как 12 мы будем поворачивать против часовой стрелки на 90 градусов.

Поэтому мне нужно иметь возможность рисовать много разных строк под разными углами.

4 Solutions collect form web for “Как рисовать текст под углом, используя PIL Python?”

Нарисуйте текст во временное пустое изображение, поверните его, затем вставьте его на исходное изображение. Вы можете завершить шаги в функции. Удачи в определении точных координат для использования – мой холодный туманный мозг не справляется с этим прямо сейчас.

Эта демонстрация записывает желтый текст с наклонным изображением:

# Demo to add rotated text to an image using PIL import Image import ImageFont, ImageDraw, ImageOps im=Image.open("stormy100.jpg") f = ImageFont.load_default() txt=Image.new('L', (500,50)) d = ImageDraw.Draw(txt) d.text( (0, 0), "Someplace Near Boulder", font=f, fill=255) w=txt.rotate(17.5, expand=1) im.paste( ImageOps.colorize(w, (0,0,0), (255,255,84)), (242,60), w) 

Также полезно знать размер нашего текста в пикселях, прежде чем мы создадим объект Image. Я использовал такой код при рисовании графиков. Тогда у меня не возникло проблем, например, с выравниванием меток данных (изображение точно такое же, как текст).

 (...) img_main = Image.new("RGB", (200, 200)) font = ImageFont.load_default() # Text to be rotated... rotate_text = u'This text should be rotated.' # Image for text to be rotated img_txt = Image.new('L', font.getsize(rotate_text)) draw_txt = ImageDraw.Draw(img_txt) draw_txt.text((0,0), rotate_text, font=font, fill=255) t = img_value_axis.rotate(90, expand=1) 

Остальная часть соединения двух изображений вместе описана на этой странице. Когда вы вращаетесь под «нерегулярным» углом, вам нужно немного улучшить этот код. Он действительно работает на 90, 180, 270 …

Я не говорю, что это будет легко или что это решение обязательно будет идеально для вас, но посмотрите здесь документацию:

http://effbot.org/imagingbook/pil-index.htm

и особенно обратите внимание на модули Image, ImageDraw и ImageFont.

Вот пример, который поможет вам:

 import Image im = Image.new("RGB", (100, 100)) import ImageDraw draw = ImageDraw.Draw(im) draw.text((50, 50), "hey") im.rotate(45).show() 

Чтобы делать то, что вы действительно хотите, вам может понадобиться создать кучу отдельных правильно повернутых текстовых изображений, а затем составить их все вместе с некоторыми более причудливыми манипуляциями. И после всего этого все еще может показаться не очень здоровым. Я не уверен, как сглаживание и такое, например, обрабатывается, но это может быть не очень хорошо. Удачи, и если у кого будет более простой способ, мне было бы интересно узнать, как хорошо.

Вот рабочая версия, вдохновленная ответом, но она работает без открытия или сохранения изображений.

Два изображения имеют цветной фон и альфа-канал, отличный от нуля, чтобы показать, что происходит. Изменение двух альфа-каналов от 92 до 0 сделает их полностью прозрачными.

 from PIL import Image, ImageFont, ImageDraw text = 'TEST' font = ImageFont.truetype(r'C:\Windows\Fonts\Arial.ttf', 50) width, height = font.getsize(text) image1 = Image.new('RGBA', (200, 150), (0, 128, 0, 92)) draw1 = ImageDraw.Draw(image1) draw1.text((0, 0), text=text, font=font, fill=(255, 128, 0)) image2 = Image.new('RGBA', (width, height), (0, 0, 128, 92)) draw2 = ImageDraw.Draw(image2) draw2.text((0, 0), text=text, font=font, fill=(0, 255, 128)) image2 = image2.rotate(30, expand=1) px, py = 10, 10 sx, sy = image2.size image1.paste(image2, (px, py, px + sx, py + sy), image2) image1.show() 
  • Как определить лазерную линию в изображении с помощью Python
  • Библиотека Python для вычисления пространственных производных оптического потока
  • Каков правильный способ отправки большого количества данных через сокеты в Python?
  • Изменение цвета изображения на основе значения RGB
  • Более высокая выборка для проекции изображения
  • Почему я получаю ImportError: нет модуля с именем «PIL»?
  • Сломанные изображения - Google App Engine
  • Библиотека изображений Python 3.1
  • Python: принятие GLCM непрямоугольной области
  • Python PIL - Draw Circle
  • Поворот большой матрицы в полутоновое изображение
  • Python - лучший язык программирования в мире.