Генератор мемов

Генератор мемов


pip install pillow


# Библиотека для работы с изображениями

from PIL import Image, ImageDraw, ImageFont

import os


# ========== Функция: Создание мема ==========

def create_meme(image_path, top_text, bottom_text, output_path):

  """

  Создает мем с текстом сверху и снизу на основе изображения.

  """

  # Открываем изображение

  img = Image.open(image_path)

  draw = ImageDraw.Draw(img)

  image_width, image_height = img.size


  # Загружаем шрифт (можно заменить на любой TrueType шрифт)

  try:

    font = ImageFont.truetype("impact.ttf", size=int(image_height/10))

  except:

    # Если шрифт Impact не найден, берем стандартный

    font = ImageFont.load_default()


  # Функция для отрисовки текста с контуром

  def draw_text(text, y_pos):

    text = text.upper()

    text_width, text_height = draw.textsize(text, font=font)

    x = (image_width - text_width) / 2 # Центрируем текст


    # Рисуем контур (чёрный)

    outline_range = 2

    for dx in range(-outline_range, outline_range+1):

      for dy in range(-outline_range, outline_range+1):

        if dx != 0 or dy != 0:

          draw.text((x+dx, y_pos+dy), text, font=font, fill='black')


    # Рисуем основной текст (белый)

    draw.text((x, y_pos), text, font=font, fill='white')


  # Если задан верхний текст — рисуем его

  if top_text:

    draw_text(top_text, y_pos=10)


  # Если задан нижний текст — рисуем его

  if bottom_text:

    draw_text(bottom_text, y_pos=image_height - int(image_height/5))


  # Сохраняем итоговый мем

  img.save(output_path)

  print(f"✅ Мем сохранен в: {output_path}")


# ========== Тестирование функции ==========

if __name__ == "__main__":

  # Путь к картинке

  image_path = "input.jpg" # <-- сюда положи своё изображение


  # Тексты для мема

  top_text = "КОГДА ПИШЕШЬ КОД"

  bottom_text = "И ВСЁ СРАБОТАЛО С ПЕРВОГО РАЗА"


  # Путь для сохранения

  output_path = "meme_output.jpg"


  # Генерируем мем

  create_meme(image_path, top_text, bottom_text, output_path)

Report Page