Кодирование графической и текстовой информации
Считаем вес картинки и текста: палитра, глубина цвета, мощность алфавита и две формулы, которые решают половину задач про объём информации.
Аватарка в мессенджере весит 2 МБ, а список класса из 25 фамилий — примерно 600 байт: разница в три тысячи раз. При этом оба файла для компьютера одинаковы — длинные цепочки нулей и единиц. Различается способ, которым картинку и текст превратили в эти нули, и именно он определяет размер. Разберёмся, из чего складывается вес рисунка и страницы текста, и выведем две короткие формулы, которыми решается большинство задач на объём.
Пиксели, палитра и глубина цвета
Растровый рисунок — мозаика из пикселей: маленьких квадратов, у каждого свой цвет. Программа хранит не сам рисунок, а номер цвета каждого пикселя из палитры — списка доступных цветов. Если в палитре N цветов, на номер нужно столько бит, чтобы хватило на все варианты: . Чёрно-белый значок обходится 1 битом на пиксель, палитра из 256 цветов требует 8 бит, а полный цвет с тремя каналами по 8 бит — 24 бита на точку. Объём всего растра считает формула: число пикселей умножить на биты одного пикселя.
Посчитаем значок настроек 32 на 32 пикселя при палитре из 256 цветов. Пикселей , глубина цвета 8 бит, значит бит. Делим на 8 — получаем 1024 байта, ровно 1 КБ. У фотографии тех же размеров глубина 24 бита на пиксель, то есть 3072 байта — втрое больше, хотя на глаз картинки почти одинаковые. Второй способ описания картинки — векторный: рисунок хранится как формулы фигур, например «окружность радиуса 15 с центром в точке (100, 100)». Логотипы, карты и схемы чертят в векторных редакторах: при любом увеличении программа пересчитывает координаты, и контур остаётся гладким.
Текст: от алфавита к байтам
С текстом работает тот же алфавитный подход, только «палитра» — это набор символов. Мощность алфавита N — сколько разных символов в нём есть. На символ отводим минимальное число бит , при котором : для алфавита из 32 символов хватает 5 бит, для клавиатурных 256 символов нужны все 8 бит — один байт на букву. Кодировка Unicode отводит на символ 2 байта, чтобы вместить алфавиты разных стран. Объём текста считается той же формулой, что и у растра: , где K — число символов, i — биты на символ. Страница учебника из 40 строк по 60 символов в однобайтовой кодировке весит байт — около 2,3 КБ.
- Мощность алфавита 16, ищем биты на символ: 2 в четвёртой степени равно 16, значит i = 4 бита.
- Сообщение из 50 символов: умножаем число символов на биты одного символа.
- Переводим в байты: 200 бит — это 25 байт.
| Единица | Равна | Пример объёма |
|---|---|---|
| 1 бит | ноль или единица | пиксель чёрно-белого значка |
| 1 байт | 8 бит | один символ текста |
| 1 КБ | 1024 байта | значок настроек 32 на 32 при палитре 256 цветов |
| 1 МБ | 1024 КБ | около 500 страниц текста по 2 КБ |
Нажми на элемент, затем на категорию. Нажми на разложенный элемент — вернётся в пул.
Рисунок из цветных квадратиков-пикселей — это графика, а логотип, заданный формулами фигур, — это графика. В палитре из 256 цветов на один пиксель уходит 8 бит, то есть байт.
Банк слов
Палитра на пальцах: сколько бит даёт сколько цветов
Глубина цвета — это ставка: сколько бит выделяется под каждый пиксель. Один бит — два цвета, чёрный и белый. Два бита — четыре, три — восемь, четыре — шестнадцать. Дальше числа растут лавиной: 8 бит дают 256 цветов, 16 бит — 65 536 оттенков, 24 бита — больше 16 миллионов. Отсюда правило, которое экономит время на контрольной: каждый добавленный бит удваивает палитру. Сколько бит нужно для N цветов? Ищи наименьшую степень двойки, которая накрывает N: для 32 цветов хватит 5 бит, для 33 — уже 6, потому что пять бит дают ровно 32 варианта и ни одного лишнего.
Прогон на живом примере. Значок 10 на 10 пикселей с палитрой из 4 цветов: 4 цвета кодируются 2 битами, пикселей 100, значит I = 100 · 2 = 200 бит — 25 байт. Тот же значок с палитрой из 256 цветов весит уже 100 байт. Рисунок не изменился ни на пиксель, а файл вырос вчетверо — из-за одного бита на точку.
| Палитра | Бит на пиксель | Где встречается |
|---|---|---|
| 2 цвета | 1 | чёрно-белый значок |
| 16 цветов | 4 | иконки в старых интерфейсах |
| 256 цветов | 8 | значок настроек из начала урока |
| больше 16 млн цветов | 24 | фотография с телефона |
Кодировки: от ASCII до Unicode
С текстом единый стандарт сложился не сразу. Кодировка ASCII отводила символу 7 бит — 128 значений: латиница, цифры, знаки препинания. Русским буквам места не осталось, и появились восьмибитные кодировки вроде Windows-1251: один байт на символ, 256 вариантов — как раз хватает латинице и кириллице вместе. Беда в том, что таких кодировок придумали несколько, и файл, набранный в одной, в другой открывался абракадаброй. Решением стал Unicode: стандарт, где каждому символу мировой письменности присвоен свой номер. Кодировка UTF-8 записывает частые символы одним байтом, а редкие двумя, поэтому английский текст весит как в ASCII, а русская буква занимает 2 байта.
Считаем: слово из 6 русских букв весит 6 байт в однобайтовой кодировке и 12 байт в Unicode. Отсюда типовой вопрос с подвохом: текст из 20 строк по 40 символов занимает 800 байт — какая это кодировка? Делим 800 байт на 800 символов, получаем по 1 байту на символ: однобайтовая. Было бы 1600 байт — значит, каждый символ весит 2 байта, это Unicode.
Прогон на конспекте: пять страниц по 40 строк по 50 символов в однобайтовой кодировке — это 5 · 2000 = 10 000 байт, около 10 КБ. Тот же конспект в Unicode потянет 20 КБ, а фотография страницы в высоком разрешении — несколько мегабайт: пиксели обходятся дороже символов. Отсюда житейское правило: текст — самый дешёвый формат, а картинка всегда тяжелее в сотни раз.
Разбор типовой задачи
Классика контрольных: рисунок 640 на 480 пикселей сохранён с палитрой из 64 цветов. Сколько килобайт он занимает? Прогоняем алгоритм целиком.
- Глубина цвета: 64 цвета кодируются шестью битами.
- Число пикселей: 640 умножить на 480.
- Объём в битах: пиксели умножить на биты одного пикселя.
- Переводим в байты: делим на 8.
- Переводим в килобайты: делим на 1024.
- Ответ: 225 КБ. Прикидка сходится: 640 на 480 — размер экрана старого монитора, сотни килобайт правдоподобны.
Собери из шагов личный алгоритм: палитра — биты, размер — пиксели, произведение, деление на 8, деление на 1024. Пять движений решают любую задачу про объём растра.
Словарь урока
- Пиксель#
- минимальный элемент растрового изображения, цветная точка
- Палитра#
- список цветов, которые использует рисунок
- Глубина цвета#
- число бит, отведённых на цвет одного пикселя
- Мощность алфавита#
- число разных символов, которые нужно закодировать
- Кодировка#
- таблица соответствия символов и их кодов
- Векторный рисунок#
- изображение из формул фигур, не теряет качество при масштабировании
Как это спрашивают на контрольной
- Сколько бит нужно для палитры из 128 цветов? Проверка на округление вверх: ровно 7 бит, ведь 2 в седьмой степени равно 128.
- Рисунок 128 на 256 пикселей при палитре из 256 цветов: объём в килобайтах. Полная цепочка из пяти шагов.
- Страница из 30 строк по 70 символов в двухбайтовой кодировке: объём в байтах. Сначала символы, потом байты.
- Растр или вектор для схемы метро? Рассуждение про масштабирование без потери качества.
- Во сколько раз рисунок с глубиной 24 бита тяжелее рисунка того же размера с глубиной 8 бит? Отношение 3 : 1 без полного расчёта.
В каждом пункте работает один и тот же ход: выписать, что дано, найти биты на элемент и умножить на число элементов. В задачах ОГЭ и ЕГЭ эти формулы вернутся для звука и видео — к ним просто добавятся новые множители.
Проверь себя
Клавиши 1–9 выбирают вариант, Enter — «Проверить»
1 Значок 16 на 16 пикселей сохранён с глубиной цвета 8 бит. Сколько байт он занимает?
2 Алфавит содержит 50 символов. Сколько бит нужно на один символ?
3 Векторный рисунок задаётся формулами фигур, поэтому не теряет качество при увеличении.
4 Соедини запись и её смысл.
Нажми на элемент слева, затем на его пару справа. Повторное нажатие отменяет связь.
5 Разложи примеры по типам графики.
Разложи элементы по категориям: нажми на элемент, потом на категорию.
6 Допиши про алфавит.
Выбери подходящее слово в каждом пропуске.
Алфавит из 32 символов требует бита на символ. Сообщение из 10 символов этого алфавита займёт бит.
7 Страница содержит 45 строк по 64 символа, кодировка однобайтовая. Каков объём текста в байтах?
8 Выбери верные утверждения.
Было понятно? Скажи — так мы видим, какие темы переписать.
Частые вопросы
Почему логотип делают векторным, а фотографию — растровой?
Логотипу нужно масштабироваться без потери качества — формулы фигур это дают. А фотография содержит плавные переходы цвета, которые формулами не описать, её удобнее хранить пикселями.
Сколько бит нужно для 100 цветов и почему?
7 бит: шесть дают только 64 варианта, а семь бит — 128, этого хватает. Всегда бери ближайшую степень двойки сверху.
Как посчитать объём текста по алфавитному подходу?
Определи мощность алфавита N, найди биты на символ i из условия 2^i ≥ N, затем умножь: I = K · i, где K — число символов. Например, для алфавита из 64 символов i = 6, и сообщение из 40 символов займёт 240 бит.
Почему русская буква в Unicode весит 2 байта?
Unicode хранит символы почти всех алфавитов мира, их десятки тысяч, и 256 вариантов однобайтовой кодировки не хватает. Два байта дают 65 536 комбинаций.