Выравнивание и изменение размера текста по изображению

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

txt = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod"

fontsize = 1  # starting font size
para = textwrap.wrap(txt, width=15)
im = Image.open('bg.jpeg')
MAX_W, MAX_H = im.size
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("arial.ttf", fontsize)
# portion of image width you want text width to be
img_fraction = MAX_H / 1000

font = ImageFont.truetype("arial.ttf", fontsize)

breakpoint = img_fraction * im.size[0]
jumpsize = 75
while True:
    if font.getsize(txt)[0] < breakpoint:
        fontsize += jumpsize
    else:
        jumpsize = jumpsize // 2
        fontsize -= jumpsize
    font = ImageFont.truetype("arial.ttf", fontsize)
    if jumpsize <= 1:
        break

# optionally de-increment to be sure it is less than criteria

current_h, pad =   MAX_W / 8, 10
for line in para:
    w, h = draw.textsize(line, font=font)
    draw.text(((MAX_W - w) / 2, current_h), line, font=font)
    current_h += h + pad

im.save('test.png')
os.remove('bg.jpeg')

В чем проблема/ошибка?

Alderven 24.12.2020 07:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
144
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте эту функцию, чтобы обрезать пробелы

def trim(im):
    bg = Image.new(im.mode, im.size, im.getpixel((0, 0)))
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    bbox = diff.getbbox()
    if bbox:
        return im.crop(bbox)

Изменение размера изображения

img=img.resize((yourwidth,yourheight),Image.ANTIALIAS))

если уменьшить размер шрифта текста проблема решится

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

MaxDev 24.12.2020 07:04

Вы пробовали? Это работает хорошо, даже мне помогает

Nanthakumar J J 24.12.2020 07:04

@MaxDev Да Если вы обрежете изображение, размер шрифта будет автоматически выровнен

Nanthakumar J J 24.12.2020 07:04

хорошо, попробую, но я не знаю, как это реализовать

MaxDev 24.12.2020 07:06

я не очень хорошо разбираюсь в питоне

MaxDev 24.12.2020 07:06

Просто используйте эту функцию, например, обрезку (imageobj)

Nanthakumar J J 24.12.2020 07:09

это только обрезает изображение, что я хочу сделать, это масштабировать текст до размера изображения

MaxDev 24.12.2020 07:16

ты имеешь в виду изменить размер?

Nanthakumar J J 24.12.2020 07:17

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

MaxDev 24.12.2020 07:19

проверить функцию изменения размера, я обновил свое решение

Nanthakumar J J 24.12.2020 07:21

не изображение, а расширение, я хочу масштабировать текст по изображению

MaxDev 24.12.2020 07:23

не могли бы вы поделиться снимком экрана и кодом?

Nanthakumar J J 24.12.2020 07:24

код pastebin.com/p3JxR8K1

MaxDev 24.12.2020 07:30

сгенерированное изображение i.imgur.com/7n5mOsS.jpg

MaxDev 24.12.2020 07:30

текст вылетает из картинки

MaxDev 24.12.2020 07:30

шрифт file.io/kxgWShvAwFYG

MaxDev 24.12.2020 07:35

проблема в ширине..

Nanthakumar J J 24.12.2020 07:40

Фактическая задача состоит в том, чтобы написать текст внутри изображения rgt?

Nanthakumar J J 24.12.2020 07:42

Так что если вы уменьшите размер шрифта текста, проблема будет решена.

Nanthakumar J J 24.12.2020 07:44

Все вопросы решены?

Nanthakumar J J 24.12.2020 07:50

Другие вопросы по теме