Загрузка...

The bot needs to generate pictures (Pillow)

Thread in Python created by mtv_inactive3438536 Nov 7, 2020. (bumped Nov 7, 2020) 597 views

  1. mtv_inactive3438536
    mtv_inactive3438536 Topic starter Nov 7, 2020 Banned 9 Jul 28, 2020
    Есть бот, генерирует слова из переписки в вк
    Я хочу добавить в него демотиваторы, чтобы он вставлял картинки из беседы и текст в демотиватор и отправлял их
    как сотворить такое на pillow?
     
  2. Pandazz
    Pandazz Nov 7, 2020 68 May 5, 2020
    делаешь заготовку демотиватора( черную рамку, чтобы внизу можно было вставить текст)
    скачиваешь фотографию, получаешь текст из беседы -> масштабируешь картинку, чтобы она влезла в демотиватор, вставляешь ее в сам демотиватор через .paste -> ставишь текст вниз демотиватора через .text, отправляешь фото в беседу
     
    1. mtv_inactive3438536 Topic starter
      Pandazz, и че это ручками делать чтоле
  3. infinityjq
    infinityjq Nov 7, 2020 310 May 20, 2019
    Нашел репозиторий и чутка переделал - https://yadi.sk/d/JLWXeGaH0St5bQ (примера лучше не нашел для картинки xD)
    Есть 2 переменные отвечающие за строки: str1, str2. В них ты пишешь свой текст, далее за картинку бот берет файл "img.jpg" и вставляет на "template.jpg". После этого он сохраняет файлом "result.jpg".
    Это всего лишь каркас для бота.
    Python
    import PIL, os
    from PIL import Image, ImageDraw, ImageFont
    import random

    str1 = 'Опа'
    str2 = '!'

    TEMPLATE_FILENAME = 'template.jpg'
    EXTENSIONS = ['.jpg', '.png']

    RESULT_FILENAME = 'result.jpg'

    UPPER_FONT = 'times.ttf'
    UPPER_SIZE = 45
    UPPER_FONT_Y = 390
    LOWER_FONT = 'arialbd.ttf'
    LOWER_SIZE = 14
    LOWER_FONT_Y = 450

    TEMPLATE_WIDTH = 574
    TEMPLATE_HEIGHT = 522
    TEMPLATE_COORDS = (75, 45, 499, 373)
    PADDING = 10

    def isValidExtension(filename):
    for extension in EXTENSIONS:
    if filename.endswith(extension):
    return True
    return False


    def drawXAxisCenteredText(image, text, font, size, pos_y):
    draw = ImageDraw.Draw(image)
    textFont = ImageFont.truetype(font, size)
    textWidth = textFont.getsize(text)[0]

    while textWidth >= TEMPLATE_WIDTH - PADDING * 2:
    textFont = ImageFont.truetype(font, size)
    textWidth = textFont.getsize(text)[0]
    size -= 1

    draw.text(((TEMPLATE_WIDTH - textWidth) / 2, pos_y), text, font = textFont)

    def getSizeFromArea(area):
    return (area[2] - area[0], area[3] - area[1])

    def makeImage():
    frame = PIL.Image.open(TEMPLATE_FILENAME)
    demot = PIL.Image.open("img.jpg")
    demot = demot.resize(getSizeFromArea(TEMPLATE_COORDS), PIL.Image.ANTIALIAS)
    frame.paste(demot, TEMPLATE_COORDS)

    drawXAxisCenteredText(frame, str1,
    UPPER_FONT, UPPER_SIZE,
    UPPER_FONT_Y)
    drawXAxisCenteredText(frame, str2,
    LOWER_FONT, LOWER_SIZE,
    LOWER_FONT_Y)
    frame = frame.convert("RGB")
    frame.save(RESULT_FILENAME)
    frame.show()

    if __name__ == '__main__':
    makeImage()
     
    1. mtv_inactive3438536 Topic starter
Top
Loading...