Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные. Дагаев / Проект_Кларк_Блинов_Яковлев.docx
Скачиваний:
1
Добавлен:
02.01.2026
Размер:
2.13 Mб
Скачать

2.4 Разработка функций для работы с изображениями и передачи данных

Данный раздел содержит подробное описание ключевых элементов проекта Telegram-бота для сжатия и обработки изображений. Функциональное разделение обеспечивает чёткое разделение ответственности между компонентами и упрощает поддержку и расширение системы.

2.4.1 Импорты, настройки и словари

Этот модуль отвечает за инициализацию среды выполнения. Загрузку внешних библиотек, чтение конфигурации из переменных окружения, определение рабочих каталогов и установку значений по умолчанию для всех параметров системы.

В основном модуле используются следующие библиотеки:

· aiogram — для создания и обработки Telegram-бота (команды, обработчики сообщений, загрузка файлов);

· PIL (Pillow) — для работы с изображениями (чтение, изменение размера, конвертация форматов, палитризация);

· img2pdf — для сборки PDF из набора изображений;

· asyncio — для асинхронной обработки запросов;

· json — для работы с пользовательскими настройками;

· dotenv — для загрузки переменных окружения;

· uuid, io, re, os, pathlib — вспомогательные модули.

Конфигурация (.env и настройки). Файл .env содержит две основные переменные:

· BOT_TOKEN — токен авторизации Telegram-бота, полученный через BotFather.

· WORKDIR — путь к рабочему каталогу для хранения пользовательских данных и настроек.

2.4.2 Пользовательские настройки

Настройки каждого пользователя сохраняются в отдельном JSON-файле, что позволяет обеспечивать персонализированную обработку изображений без необходимости использования полноценной базы данных. Пример структуры файла настроек. Пример структуры:

{

"quality": 85,

"target_kb": 300,

"max_w": 1920,

"max_h": 1080,

"auto": true,

"palette_colors": 128,

"strip_exif": false

}

Рис. 16 – Структура пользовательских настроек

Каждый параметр отвечает за:

· quality — качество JPEG (1–95);

· target_kb — целевой размер файла в КБ;

· max_w/max_h — ограничение ширины/высоты;

· auto — автоопределение формата (фото → JPEG, графика → PNG);

· palette_colors — количество цветов в палитровом PNG;

· strip_exif — удаление EXIF-метаданных для защиты конфиденциальности..

2.4.3 Функции обработки изображений

Данный модуль содержит ядро системы — функции, непосредственно отвечающие за чтение, анализ, сжатие и преобразование графических файлов. Все операции выполняются в оперативной памяти без сохранения промежуточных файлов на диск, что повышает производительность и безопасность. Основные функции включают в себя:

· compress_image(raw_bytes, ...) — главная функция сжатия, принимает байты изображения и параметры сжатия, возвращает сжатые байты и имя файла;

· classify_image(img) — определяет тип изображения («photo» или «graphics») на основе эвристического анализа;

· bytes_to_pdf(images) — конвертирует список изображений в единый PDF-файл.

· on_image(message) — основной обработчик загружаемых изображений. Загружает файл, применяет настройки пользователя, выполняет сжатие и возвращает результат как документ.

Вспомогательные функции:

  1. _resize_if_needed() — изменяет размер изображения с сохранением пропорций;

  2. _apply_strip_exif() — удаляет EXIF и ICC-данные из изображения;

  3. _save_jpeg_bytes() — сохраняет изображение в формате JPEG с заданным качеством;

  4. _save_png_palettized_bytes() — сохраняет изображение в палитровом PNG.