igor_89squad
@igor_89squad
Python

Рассчитать от куда писать слово. PIL?

@bot.command(aliases = ['карта', 'левел', 'уровень'])
async def stats(ctx):
    await ctx.channel.purge(limit=1)
    img = Image.new('RGBA', (400, 220), '#232529')
    url = str(ctx.author.avatar_url)[:-10]
    response = requests.get(url, stream = True)

    try:
        response = Image.open(io.BytesIO(response.content))
        response = response.convert('RGBA')
        response = response.resize((90, 90), Image.ANTIALIAS)
        img.paste(response, (17, 17, 107, 107))
    except:
        response = requests.get('https://discord-server.com/images/discord-avatar-3.png', stream=True)
        response = Image.open(io.BytesIO(response.content))
        response = response.convert('RGBA')
        response = response.resize((90, 90), Image.ANTIALIAS)

        img.paste(response, (17, 17, 107, 107))

    idraw = ImageDraw.Draw(img)
    name = ctx.author.name
    tag = ctx.author.discriminator

    headline = ImageFont.truetype('arial.ttf', size=20)
    undertext = ImageFont.truetype('arial.ttf', size=14)
    sundertext = ImageFont.truetype('arial.ttf', size=10)
    bigtext = ImageFont.truetype('arial.ttf', size=30)
    mediumtext = ImageFont.truetype('arial.ttf', size=22)

    name = ctx.author.name
    for i in sql.execute(f"SELECT word FROM users WHERE id = '{name}'"):
        level = i[0]

    for i in sql.execute(f"SELECT word FROM users WHERE id = '{ctx.author.name}'"):
        progress = i[0]

    len_name = len(ctx.author.name)
    number = (len(ctx.author.name)*15)+115

    rank = RankEdit(ctx.author.name)

    for i in sql.execute(f"SELECT rank FROM users WHERE id = '{name}'"):
        exp = i[0]

    idraw.text((135, 146), f'{rank[0]}', font=undertext)#, fill= (63, 68, 71)
    idraw.text((345, 155), f'/{config.Exp(exp)}', font=undertext, fill= (63, 68, 71))
    idraw.text((exp_print(ctx.author.name), 150), f'{progress}', font=headline, fill=(63, 68, 71))
    response = requests.get(f'{rank[1]}', stream = True)
    response = Image.open(io.BytesIO(response.content))
    response = response.convert('RGBA')
    response = response.resize((100, 40), Image.ANTIALIAS)

    img.paste(response, (25, 125, 125, 165))

    #C:\py\Discord\bot\info\Ranks

    for i in sql.execute(f"SELECT rank FROM users WHERE id = '{name}'"):
        lvl = i[0]

    idraw.text((115, 54), f'{name}', font=headline)
    idraw.text((number, 64), f'#{tag}', font=sundertext, fill= (63, 68, 71))
    #idraw.text((140, 50), f'ID: {ctx.author.id}', font=undertext)

    #progress bar
    idraw.line(((10, 175), (390, 175)), fill=(17, 17, 17), width=5)
    idraw.line(((10, 175), (config.progressbar(progress, lvl), 175)), fill=(53, 68, 127), width=5)

    img.save(r'C:\py\Discord bot\info\level.png')

    await ctx.send(file = discord.File(fp = r'C:\py\Discord bot\info\level.png'))


Нам нужно из всего кода только это:
idraw.text((115, 54), f'{name}', font=headline) #Первое слово
idraw.text((number, 64), f'#{tag}', font=sundertext, fill= (63, 68, 71)) #Второе слово


Проблема в том что я не могу рассчитать точное расстояние где кончается первое слово. Мне нужно чтобы после первого слова было через 2 пикселя второе. Но я не могу совершенно понять как это сделать.

Первое слово бывает разным по длине. Может быть от 2 букв до 10.

Короткое первое слово.
5f830e154154c698766271.png

Длинное первое слово.
5f830e419de95540648539.png
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
https://pillow.readthedocs.io/en/stable/reference/...

headlinesize = headline.getsize(ctx.author.name)
idraw.text((115 + namesize[0] + 2, 64), f'#{tag}', font=sundertext, fill=(63, 68, 71))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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