- •Проектная работа
- •Глава 1. Технологии разработки Telegram бота. 4
- •Глава 2. Разработка Telegram-бота 21
- •Перечень терминов и сокращений
- •Введение
- •Глава 1. Технологии разработки Telegram бота.
- •Обзор литературы
- •1.2 История мессенджера Telegram
- •1.3 Сравнительный анализ языков программирования для Telegram-ботов
- •1.4 Характеристика языка программирования Python
- •1.5 Обзор фреймворков и библиотек для создания ботов
- •1.6 Обзор библиотек и методов обработки изображений
- •1.7 Описание алгоритмов и форматов данных
- •1.7.1. Цветовые модели и форматы данных
- •1.7.2 Алгоритм палитризации
- •1.7.3 Алгоритм классификации изображений
- •1.7.4 Алгоритм сжатия jpeg
- •1.7.5 Алгоритм сжатия png
- •Глава 2. Разработка Telegram-бота
- •2.1 Планируемые возможности бота и подходы к их реализации
- •2.2 Разработка модуля обработки изображений
- •2.3 Разработка пользовательского интерфейса
- •2.4 Разработка функций для работы с изображениями и передачи данных
- •2.4.1 Импорты, настройки и словари
- •2.4.2 Пользовательские настройки
- •2.4.3 Функции обработки изображений
- •2.4.4 Функции работы с пользовательскими данными
- •2.4.6 Обработчики команд и сообщений
- •2.4.7 Основной цикл
- •2.5 Описание разработки Telegram-бота
- •2.6 Инструкция пользователя
- •Список литературы
- •Приложение
1.6 Обзор библиотек и методов обработки изображений
В процессе разработки Telegram-бота для сжатия изображений наша команда провела детальный анализ доступных библиотек и форматов обработки графических данных. Среди множества инструментов мы рассмотрели четыре наиболее распространённых решения, каждое из которых обладает определёнными преимуществами и ограничениями в контексте задач оптимизации изображений.
Библиотека OpenCV (Open Source Computer Vision Library) является мощным инструментом для работы с изображениями и видео, предоставляющим широкий набор функций компьютерного зрения. Она отличается высокой производительностью за счёт оптимизированных нативных реализаций и поддерживает сложные операции, такие как детекция объектов, фильтрация и морфологические преобразования. Однако её основная ориентация на задачи машинного зрения и относительная сложность интеграции в асинхронный пайплайн делают её избыточной для проекта, сфокусированного на базовом сжатии и конвертации изображений.
Библиотека Wand (Python-обёртка над ImageMagick) предоставляет доступ к богатому функционалу ImageMagick, включая поддержку более 200 форматов изображений, продвинутые алгоритмы сжатия и работу с метаданными. Её ключевым преимуществом является универсальность и возможность тонкой настройки параметров обработки. Тем не менее, зависимость от внешней библиотеки ImageMagick усложняет развёртывание, а синхронный характер большинства операций может создавать проблемы при интеграции с асинхронной архитектурой бота.
Библиотека imageio специализируется на чтении и записи изображений и видео, предлагая простой интерфейс для работы с разнообразными форматами. Она хорошо подходит для задач пакетной обработки и конвертации, обладает минималистичным API и поддерживает работу с массивами данных. Однако её возможности по манипуляции с изображениями (изменение размера, применение фильтров, управление качеством) ограничены по сравнению с более полнофункциональными решениями, что сужает её применимость в проекте, требующем гибкой настройки параметров сжатия.
Библиотека Pillow (современный форк PIL – Python Imaging Library), которая в итоге была выбрана для нашего проекта, сочетает в себе простоту использования, широкую поддержку форматов и достаточный набор функций для решения задач сжатия. Её основные преимущества включают интуитивно понятный API, поддержку ключевых операций (изменение размера, обрезка, конвертация, работа с метаданными), активное сообщество и регулярные обновления. Хотя Pillow уступает OpenCV в производительности при выполнении сложных алгоритмов компьютерного зрения, для задач оптимизации размера и качества изображений её возможностей оказалось вполне достаточно.
Выбор форматов сжатия также потребовал анализа специфики использования. Для фотографий и изображений с непрерывными цветовыми переходами был выбран JPEG благодаря поддержке регулируемого уровня сжатия, прогрессивной развёртки и широкой совместимости. Для скриншотов, схем и изображений с чёткими границами был применён PNG с палитризацией, что позволяет значительно уменьшить размер файла без потери читаемости текста и контуров. Автоматическое определение типа изображения реализовано на основе эвристического анализа количества уникальных цветов и усреднённой резкости краёв, что обеспечивает адаптивный выбор оптимального формата.
Таким образом, выбор Pillow в качестве основной библиотеки обработки изображений был обусловлен её сбалансированностью, простотой интеграции с асинхронной архитектурой aiogram и достаточным функционалом для реализации всех требуемых сценариев сжатия. Использование комбинации JPEG и PNG с интеллектуальным выбором формата позволило достичь значительного уменьшения размера файлов при сохранении приемлемого визуального качества, что полностью соответствует целям проекта.
