Структуры данных
Какие данные будут использоваться в программе:
- Координаты одной конкретной надписи на меме: класс
Point
; - Связь между изображением и всеми точками, где на нём будет размещаться текст: класс
Meme
; - Набор размеченных мемов: словарь
MEMES
.
Координаты надписей
Чтобы создать мем, нужно подготовить исходное изображение и отметить на нём точки, в которые будет вставляться текст. Таких точек на каждом изображении может быть несколько. Каждая точка состоит из 2 координат: x
(горизонтальная) и y
(вертикальная).
Пусть координата y
будет числом, а координата x
- либо числом, либо None
. Если x is None
, то текст нужно будет автоматически отцентрировать по горизонтали.
from dataclasses import dataclass
from typing import Optional
@dataclass
class Point:
x: Optional[int]
y: int
Мем
Мем можно представить в виде имени файла с изображением и набора «слотов» для надписей.
@dataclass
class Meme:
filename: str
slots: list[Point]
Список мемов
Для начала будем использовать 2 изображения: кот-программист и афроамериканец-суперхакер.
Поместим их в директорию img/
и свяжем с кодом вот так:
MEMES = {
'Coding cat': Meme(
'img/coding_cat.jpg',
[
Point(None, 15),
Point(None, 250)
]
),
'Hackerman': Meme(
'img/hackerman.jpg',
[
Point(None, 20)
]
),
}
Конечно, по уму было бы убрать эту структуру данных во внешнее хранилище, хотя бы в json-файл, но это раздует код и отвлечёт ваше внимание от самого главного. Поэтому при желании можете сделать это самостоятельно, ну а мы здесь напишем простой и топорный код в одном модуле :)