Загрузка...

Нужно чтобы бот генерировал картинки (Pillow)

Тема в разделе Python создана пользователем mtv_inactive3438536 7 ноя 2020. (поднята 7 ноя 2020) 599 просмотров

  1. mtv_inactive3438536
    mtv_inactive3438536 Автор темы 7 ноя 2020 Заблокирован(а) 9 28 июл 2020
    Есть бот, генерирует слова из переписки в вк
    Я хочу добавить в него демотиваторы, чтобы он вставлял картинки из беседы и текст в демотиватор и отправлял их
    как сотворить такое на pillow?
     
  2. Pandazz
    Pandazz 7 ноя 2020 68 5 май 2020
    делаешь заготовку демотиватора( черную рамку, чтобы внизу можно было вставить текст)
    скачиваешь фотографию, получаешь текст из беседы -> масштабируешь картинку, чтобы она влезла в демотиватор, вставляешь ее в сам демотиватор через .paste -> ставишь текст вниз демотиватора через .text, отправляешь фото в беседу
     
    1. mtv_inactive3438536 Автор темы
      Pandazz, и че это ручками делать чтоле
  3. infinityjq
    infinityjq 7 ноя 2020 310 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 Автор темы
Top
Загрузка...