Как я могу получить ширину и высоту текста, который был нарисован Image.Draw на картинке? - PullRequest
1 голос
/ 23 января 2020

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

Я вставил текст в изображение, используя ImageDraw из Python Библиотеки изображений. Мой вопрос сейчас: есть ли способ узнать ширину и высоту текста в целом? Для себя представьте, что текст имеет вид прямоугольной рамки angular. Я хочу получить размеры этого текстового поля. Может ли мой text1 быть обработан как изображение и можно ли получить его размер, набрав что-то вроде «width, height = text1.size»?

Я уже пытался получить ширину, используя ImageDraw.getwidth команда, как предложено в других вопросах, но эти решения, к сожалению, не сработали для меня.

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

Заранее благодарим за поддержку!

На прилагаемом рисунке вы видите два текста, нарисованных в ImageDraw, с именами «текст» и «xyz». Я хочу, чтобы xyz соответствовал «test», даже если «test» будет содержать больше букв. Для этого мне нужно знать ширину «теста».

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы можете просто написать тот же текст с тем же шрифтом того же размера белым цветом на отдельном холсте (черный фон), а затем получить обрезанный «ограничивающий прямоугольник» , подобный размеру:

#!/usr/bin/env python3

from PIL  import Image, ImageFont, ImageDraw

# Create a blank canvas
canvas = Image.new('RGB', (100,100))

# Get a drawing context
fontsize=28
draw = ImageDraw.Draw(canvas)
monospace = ImageFont.truetype("/Library/Fonts/Andale Mono.ttf",fontsize)

text = "Hello"
white = (255,255,255)
draw.text((10, 10), text, font=monospace, fill=white)

# Find bounding box
bbox = canvas.getbbox()

# Debug
print(bbox)

Вывод

(12, 17, 93, 36)

Это означает, что текст (93-12) = 81 пикселей в ширину и (36-17) = 19 пикселей в высоту.

enter image description here

0 голосов
/ 23 января 2020

используя opencv или matplotlib для чтения вашего изображения

img = cv2.cvtColor(cv2.imread('/home/ksooklall/q0MXd.jpg'), cv2.COLOR_BGR2RGB)

найдите местоположение изображения

text1 = img[950:, 50:250]

print(text1.shape)
(50, 200, 3)

enter image description here

...