Как рисовать текст под углом, используя 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 для вычисления пространственных производных оптического потока
  • OpenCV - Существует ли реализация маркерной реконструкции в opencv
  • Можете ли вы «потопить» изображения в ffmpeg, чтобы создать видео, а не сохранять их на диск?
  • Как определить лазерную линию в изображении с помощью Python
  • Поляризация изображения - как найти среднее значение для каждого значения RGB
  • Python - поиск доминирующего / наиболее распространенного цвета в изображении
  • Матричное умножение по элементам в NumPy
  • Как я могу видеть каналы RGB данного изображения с помощью python?
  • Python - лучший язык программирования в мире.