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

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

Сюжет: [115 ]

enter image description here

Код 1 - Мои изменения в вашем образце:

fig.data[0]['hoverinfo'] = 'all'
fig['layout']['yaxis']['scaleanchor']='x'
fig['layout']['xaxis']['gridcolor'] = 'rgba(0, 0, 0, 0)'
fig['layout']['yaxis']['gridcolor'] = 'rgba(0, 0, 0, 0)'
fig['layout']['yaxis']['color'] = 'rgba(0, 0, 0, 0)'

Код 2 - все для простого копирования и вставки:

import numpy as np
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)
import plotly.figure_factory as ff

#%qtconsole

z = np.random.randint(0,6, size=(10, 10))
z_text = np.full(z.shape, '', dtype=str)

d = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e', 5:'f'}
class_mat = np.vectorize(d.get)(z)

fig = ff.create_annotated_heatmap(z, annotation_text=z_text, text=class_mat, hoverinfo='text', colorscale='Viridis', )
fig.layout.title = 'Semantic Segmentation'

# My suggestions:
fig.data[0]['hoverinfo'] = 'all'
fig['layout']['yaxis']['scaleanchor']='x'
fig['layout']['xaxis']['gridcolor'] = 'rgba(0, 0, 0, 0)'
fig['layout']['yaxis']['gridcolor'] = 'rgba(0, 0, 0, 0)'
fig['layout']['yaxis']['color'] = 'rgba(0, 0, 0, 0)'

iplot(fig)

Скорость:

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

27
задан carrier 29 October 2008 в 01:04
поделиться

3 ответа

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

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

# 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)
42
ответ дан 28 November 2019 в 04:54
поделиться

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

(...)
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)

Остальная часть объединения двух изображений уже описана на этой странице. When you rotate by an "unregular" angle, you have to improve this code a little bit. It actually works for 90, 180, 270...

9
ответ дан 28 November 2019 в 04:54
поделиться

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

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

и особенно обращают внимание на Изображение, 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()

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

3
ответ дан 28 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: