- •Проектная работа
- •Глава 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.7 Описание алгоритмов и форматов данных
1.7.1. Цветовые модели и форматы данных
В проекте используются четыре основных формата данных для хранения и передачи графической информации: JPEG, PNG, PDF и JSON. Каждый из них имеет свои особенности, область применения и алгоритмы сжатия, что позволяет оптимально обрабатывать различные типы изображений.
JPEG (Joint Photographic Experts Group) — формат сжатия с потерями, основанный на дискретном косинусном преобразовании (ДКП). В контексте проекта JPEG применяется для сжатия фотографий и изображений с непрерывными цветовыми переходами. Основные характеристики:
· Поддержка 24-битного цвета (16,7 млн оттенков)
· Регулируемый уровень сжатия через параметр качества (1–95)
· Прогрессивная развертка для постепенной загрузки
· Субдискретизация цветности 4:2:0 для уменьшения объема данных
· Удаление высокочастотных компонентов, незаметных для человеческого глаза.
PNG (Portable Network Graphics) — формат сжатия без потерь, основанный на алгоритме Deflate. В проекте используется в варианте PNG-P (палитровый) — индексированное изображение с ограниченной палитрой (до 256 цветов)
Для графических элементов (скриншотов, схем, текста) применяется палитровая версия PNG с адаптивной палитрой и дизерингом, что позволяет значительно уменьшить размер файла при сохранении визуального качества.
PDF (Portable Document Format) — используется для сборки многостраничных документов из отдельных изображений. В проекте реализовано преобразование последовательности изображений в единый PDF-файл с сохранением исходного порядка и разрешения.
JSON (JavaScript Object Notation) представляет собой легковесный текстовый формат для хранения и передачи структурированных данных, основанный на синтаксисе объектов JavaScript. Он широко используется в веб-API, конфигурационных файлах и для сериализации данных благодаря простоте и читаемости. Формат поддерживает базовые типы данных и вложенные структуры.Основная структураДанные в JSON организуются в объекты (в фигурных скобках {}) или массивы (в квадратных скобках []). Объекты состоят из пар "ключ-значение", где ключи — это строки в двойных кавычках, а значения разделены двоеточием. Пары разделяются запятыми, без завершающей запятой в конце. Пример простого объекта:
RGB (Red, Green, Blue) представляет собой аддитивную цветовую модель, где каждый видимый цвет формируется путем сложения различных интенсивностей трех первичных цветов: красного, зеленого и синего. Эта модель основана на принципах человеческого цветового восприятия, поскольку сетчатка глаза содержит три типа колбочек, максимально чувствительных к длинам волн, соответствующих именно этим трем цветам.
В цифровых системах используется дискретное представление RGB, где каждый канал кодируется определенным количеством битов. В наиболее распространенном 24-битном формате:
· Каждый из трех каналов (R, G, B) занимает 8 бит
· Диапазон значений для каждого канала: от 0 до 255 (2⁸ = 256 возможных значений)
· Общее количество уникальных цветов: 256 × 256 × 256 = 16 777 216 оттенков
Такое представление основано на психофизических исследованиях, показавших, что человеческий глаз способен различать примерно 10 миллионов цветов, что делает 24-битное кодирование вполне достаточным для большинства практических применений. В проекте RGB используется как основное цветовое пространство для работы с полноцветными изображениями перед их конвертацией в конечные форматы.
PNG-P (PNG Paletted) представляет собой специализированную разновидность формата PNG, разработанную для эффективного хранения графических изображений с ограниченным цветовым разнообразием. В отличие от полноцветного PNG-RGB, который кодирует каждый пиксель как тройку 8-битных значений (24 бита на пиксель), PNG-P использует принципиально иной подход, основанный на индексированных цветах.
Фундаментальный принцип: вместо хранения фактических значений RGB для каждого пикселя, PNG-P хранит:
1. Палитру (color table) — массив цветов (обычно от 2 до 256), представленных в формате RGB
2. Индексную карту (index map) — матрицу, где каждый элемент указывает на позицию цвета в палитре
Математическое представление: если представить изображение размером M×N пикселей с палитрой из K цветов, то:
Палитра: P = {C₁, C₂, ..., Cₖ}, где Cᵢ = (Rᵢ, Gᵢ, Bᵢ)
Индексная карта: I = [iₘₙ], где iₘₙ ∈ {1, 2, ..., K}
Результирующий пиксель: Pixel(m,n) = P[iₘₙ]
Техническая архитектура PNG-P. PNG-P сохраняет все стандартные блоки формата PNG, но с критическими отличиями в блоке IHDR (Image Header):
Цветовой тип (Color Type): 3 (индексированный цвет)
Глубина цвета (Bit Depth): 1, 2, 4, или 8 бит на индекс
Блок PLTE (Palette): содержит саму палитру в виде последовательности троек RGB:
PLTE = [R₁G₁B₁ R₂G₂B₂ ... RₖGₖBₖ]
Максимальный размер: 256 записей × 3 байта = 768 байт
Блок tRNS (Transparency): Опциональный блок для определения прозрачности цветов палитры. Для каждого цвета может быть задано значение альфа-канала от 0 (полностью прозрачный) до 255 (полностью непрозрачный).
