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

Telegram-бот для сжатия изображений

В условиях стремительной цифровизации и роста объёма передаваемых медиа-данных возникает потребность в инструментах для оптимизации графического контента.

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

Цели и задачи проекта: путь к автоматизации сжатия изображений

Исследование возможностей

Изучить технологические возможности Telegram Bot API для максимального использования его потенциала.

Разработка архитектуры

Создать надёжную и масштабируемую архитектуру бота, учитывающую все функциональные требования.

Настройка клиента

Интегрировать и настроить работу с JSON для надёжного хранения пользовательских данных.

Тестирование и документация

Провести всестороннее тестирование, устранить ошибки и подготовить детальные инструкции для пользователей.

Основная цель проекта — создание полнофункционального Telegram-бота, который обеспечит автоматизированное сжатие изображений с дополнительными функциями, обработкой команд, соответствуя современным требованиям к удобству и эффективности.

Актуальность проекта в цифровой эпохе

Цифровизация

В условиях стремительной цифровизации и роста объёма передаваемых медиаданных возникает потребность в инструментах для оптимизации графического контента.

Оптимизация трафика

Оптимизация трафика и памяти — необходимость экономии мобильного трафика и места на устройствах. дистанционный контроль знаний незаменимым.

Конфиденциальность в цифровую эпоху

Конфиденциальность данных — важность удаления метаданных (геолокация, параметры съёмки) из изображений перед отправкой.

Платформа Telegram

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

Наш проект решает эти задачи, предоставляя инструмент для быстрой и интеллектуальной оптимизации изображений прямо в чате.

Выбор технологического стека для разработки бота

Язык программирования: Python

Простой и читаемый синтаксис, ускоряющий разработку.

Поддержка асинхронного программирования (asyncio) для высокой производительности.

Обширное сообщество и огромное количество библиотек для любых задач.

Универсальность и кроссплатформенность, обеспечивающие гибкость развёртывания.

Основной фреймворк: aiogram

• Асинхронный фреймворк, работающий на основе async/await для эффективной обработки запросов.

• Поддержка FSM (машины состояний) для управления

сложными сценариями взаимодействия.

• Удобная маршрутизация команд и событий, упрощающая разработку.

• Лёгкая интеграция с базами данных и внешними API.

Дополнительные инструменты

·img2pdf — для сборки изображений в PDF-документы.

·JSON — для хранения пользовательских настроек.

·dotenv — для управления конфигурацией.

Выбор Python и aiogram обусловлен их гибкостью, производительностью и обширной экосистемой, что позволяет создать надёжную и масштабируемую систему. Дополнительные инструменты обеспечивают полный цикл работы с данными, от хранения до анализа и визуализации.

Модульная архитектура системы Telegram-бота

1Модуль конфигурации Загрузка настроек и переменных окружения (токен бота, рабочий каталог).

2Модуль обработки изображений Ядро системы: сжатие, изменение размера,

конвертация форматов, классификация типа изображения.

3Модуль управления настройками Сохранение и загрузка персональных

параметров пользователей (качество, целевой размер и др.) в формате JSON.

4Модуль PDF-сессий

Временное хранение изображений в оперативной памяти для сборки многостраничных PDF-документов.

5 Модуль обработчиков команд

 

Логика взаимодействия с пользователем через

 

Telegram API (команды, загрузка файлов,

 

ответы).

Рис. 1 – Схема

Основные этапы разработки системы

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

1. Планирование функционала — определение ключевых функций: адаптивное сжатие, настройка параметров, сборка PDF, удаление EXIF-данных.

2. Проектирование архитектуры — разработка модульной структуры с чётким разделением ответственности.

3. Реализация логики сжатия — написание алгоритмов классификации изображений, бинарного Поиска качества, палитризации PNG.

4. Разработка пользовательского интерфейса — создание системы команд (/start, /quality, /pdf_start и др.) и обработчиков сообщений.

5.Интеграция и тестирование — объединение модулей, тестирование на различных типах изображений, обработка ошибок.

6.Оптимизация и документация — улучшение производительности, подготовка инструкции для пользователей.

Цветовая модель и форматы данных

В проекте используются четыре основных формата данных для хранения и передачи графической информации:

·JPEG — растровый формат для фотографий с сжатием с потерями, поддерживает до 24-битный цвет, но не прозрачность.

·PNG — растровый формат без потерь с поддержкой прозрачности и альфа-канала, подходит для графики и логотипов.

·PDF — универсальный формат документов, сохраняет текст, векторную и растровую графику, шрифты и макет для печати или просмотра.

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

·RGB (Red, Green, Blue) представляет собой аддитивную цветовую модель, где каждый видимый цвет формируется путем сложения различных интенсивностей трех первичных цветов: красного, зеленого и синего.

Детализация реализации Telegram-бота

Реализация Telegram-бота является ядром системы. Была разработана модульная структура проекта, обеспечивающая чистоту кода, легкость отладки и возможность дальнейшего расширения функционала.

·Адаптивный алгоритм сжатия:

·Классификация: изображение анализируется на количество уникальных цветов и резкость краёв для определения типа («фото» или «графика»).

·Для фото: применяется JPEG-сжатие с настраиваемым качеством и прогрессивной развёрткой.

·Для графики: используется палитровый PNG с дизерингом Флойда-Штайнберга для сохранения чёткости контуров.

·Контроль размера: бинарный поиск по параметру качества для достижения заданного размера файла.

·Управление метаданными: опция удаления EXIF и ICC-данных для защиты приватности.

·Сборка PDF: последовательная загрузка изображений и объединение их в один PDF-документ.

Классификация изображений

При поступлении изображения, бот автоматически может определить к какому типу его отнести - «фотография» или «графика»·

Цель алгоритма состоит в том, чтобы выбрать оптимальный алгоритм сжатия:

· Фото (JPEG): Непрерывные тона, плавные градиенты.

· Графика (PNG): Четкие края, ограниченная цветовая палитра (скриншоты, схемы, текст).

Применяются два ключевых признака:

1. Статистика цвета: подсчет уникальных цветов на уменьшенной копии

(256x256). Меньше 20 000 цветов → признак графики.

2. Текстурный анализ: Применение фильтра обнаружения краев (FIND_EDGES на основе оператора Лапласиана) и вычисление средней яркости результата. Низкая средняя резкость (<40) → признак графики.

Классификация изображений. Обзор работы

Программная реализация классификации изображения на языке программирования Python. И пример работы бота с изображением пейзажа (рис. 2).

Цель алгоритма состоит в том, чтобы выбрать оптимальный алгоритм сжатия:

def classify_image(img: Image.Image) -> str: # 1. Уменьшаем и считаем цвета

rgb_small = img.convert("RGB").resize((256, 256))

uniq = len(rgb_small.getcolors(maxcolors=1 << 20)) # 2. Анализируем резкость

краев

 

edges = rgb_small.filter(ImageFilter.FIND_EDGES).convert("L")

edge_mean = sum(edges.getdata()) / (256 * 256) # 3. Комбинированное правило

(эмпирические пороги)

if uniq < 20000 and edge_mean < 40:

return "graphics" # -> Будеи сжимать в PNG

return "photo"

# -> Будеи сжимать в JPEG

imageFilter.FIND_EDGES — это фильтр из модуля ImageFilter библиотеки

Рис. 2 – Пример работы по сжатию

 

Pillow, который выявляет и подчёркивает края объектов на изображении.

 

Применяет свёртку, обнаруживающую резкие изменения яркости между

 

соседними пикселями.