Кодирование текста, графики и звука
Смотри, из чего складывается вес файла: символ — это байт, пиксель — несколько бит, а звук — тысячи замеров в секунду. Считаем объём по формулам.
Ты сделал скриншот экрана — файл вышел 2 МБ, а страница текста на весь этот экран весит около 2 КБ, в тысячу раз меньше. Откуда разница? Всё, что показывает компьютер, нужно превратить в нули и единицы, и у каждого типа данных свой способ. Текст кодируется символ за символом, картинка — пиксель за пикселем, звук — замерами громкости тысячи раз в секунду. Чем точнее копия, тем больше байт она весит.
Текст, пиксели и дискретизация звука
Текст. Каждый символ заменяют числом по таблице кодировки: в старой ASCII на букву уходил 1 байт, в Unicode русская буква занимает 2. Страница в 2000 символов — это 2-4 КБ. Графика. Картинка — сетка пикселей, и каждый хранит свой цвет. Сколько бит на пиксель — такая и глубина цвета: чёрно-белой точке хватает 1 бита, 256 цветам нужно 8 бит, а 16,7 миллионам оттенков — 24 бита, то есть 3 байта. Фото 4000 на 3000 пикселей при 3 байтах на точку весит 36 000 000 байт, около 34 МБ, — вот зачем нужно сжатие. Звук. Звуковая волна непрерывна, и компьютер замеряет её громкость через равные промежутки — это дискретизация. На Audio CD звук измеряют 44100 раз в секунду, каждый замер занимает 2 байта: секунда без сжатия — почти 86 КБ.
Кстати, растровая графика — не единственная. Векторная описывает картинку формулами: линия — это уравнение, круг — центр и радиус. Такой логотип масштабируется до билборда без потери качества и весит килобайты, а не мегабайты. Фотография из камеры — всегда растр: миллионы пикселей с собственным цветом, поэтому она тяжёлая и при увеличении покрывается «квадратиками».
Почему хватает 24 бит? Считается, что человеческий глаз различает порядка десяти миллионов оттенков, а двойка в двадцать четвёртой даёт 16,7 миллиона — с запасом. Экономный режим 16 бит на пиксель у старых дисплеев проявлял полосы на закатах, а профессиональные фотографы снимают с ещё большей глубиной, чтобы при обработке не оставалось следов.
Формулы объёма для трёх типов данных
У каждого способа кодирования — своя формула объёма. Для текста: K символов по i байт на символ. Для графики: K пикселей по i бит — формула та же, только i теперь биты на пиксель. Для звука: f замеров в секунду, i бит на замер, t секунд записи — перемножаем три множителя. Секунда стерео на Audio CD: 44100 замеров, 16 бит, 2 канала — это 1 411 200 бит, то есть 176 400 байт в секунду, вдвое больше моно. Минута такого звука весит больше 10 МБ — поэтому и нужны форматы сжатия вроде MP3.
Звук можно записывать и без оцифровки волны: формат MIDI хранит не замеры, а команды — какая нота, каким инструментом, как долго звучит. Такой файл весит килобайты, но звучит ровно так, как позволяет синтезатор: одно и то же произведение на разных устройствах играет по-разному. MIDI полезен для нот и электронной музыки, а для живой песни нужна именно дискретизация.
| Тип данных | Что кодируется | Формула объёма |
|---|---|---|
| Текст | символ — 1 или 2 байта | I = K · i |
| Растровая графика | пиксель — i бит цвета | I = K · i |
| Звук | замер громкости — i бит | I = f · i · t |
- Пикселей: 2592 · 1944 — около 5 миллионов
- Глубина цвета 24 бита — это 3 байта на пиксель
- Объём: 5 038 848 · 3 = 15 116 544 байта
- Дважды делим на 1024: примерно 14,4 МБ
ASCII и Unicode: таблицы символов
В 1963 году в США утвердили стандарт ASCII — американский код для телетайпов. На символ отводилось 7 бит, всего 128 символов: латиница в двух регистрах, цифры, знаки препинания и служебные коды. Буква A получила код 65, строчная a — 97, а цифра ноль — 48: эти числа до сих пор спрятаны внутри любого текстового файла.
128 символов хватило англоговорящим, но не русским, китайцам и арабам. В разных странах придумали свои 8-битные таблицы — КОИ-8, Windows-1251, — и текст, набранный в одной кодировке, в другой превращался в бессмыслицу: так в старых письмах появлялись «кракозябры». Выходом стал Unicode: единая таблица, где каждому символу мировой письменности присвоен свой номер. Сегодня их больше 140 тысяч, а самым популярным форматом записи стала UTF-8: латиница занимает 1 байт, русские буквы — 2, редкие символы — до 4.
| Кодировка | Сколько символов | Байт на русскую букву |
|---|---|---|
| ASCII, 1963 год | 128 | нет русских букв |
| Windows-1251 | 256 | 1 |
| КОИ-8 | 256 | 1 |
| Unicode в UTF-8 | более 140 тысяч | 2 |
Сравни на примере: фраза из 100 русских букв в однобайтовой кодировке весит 100 байт, в UTF-8 — 200. Латиница в UTF-8 остаётся однобайтной, поэтому программный код от перехода на Unicode почти не потяжелел. А вот дневник, набранный русскими буквами, вырастет вдвое: за универсальность платят объёмом.
Почему сжатие неизбежно
Посчитаем час музыки с Audio CD: 176 400 байт в секунду умножаем на 3600 секунд — получается около 600 МБ, больше половины гигабайта за один час. Форматы с потерями решают проблему: MP3 хранит примерно десятую часть данных, отбрасывая то, что ухо почти не различает. Фото в JPEG проходит тот же путь: из камеры файл выходит в разы меньше сырого растрового кадра. Сжатие бывает без потерь — архивы, и с потерями — MP3 и JPEG; именно второе сделало возможными карманные плееры и гигабайтные галереи в телефоне.
Архиваторы работают иначе — без потерь: ZIP находит повторяющиеся куски и заменяет их короткими ссылками, поэтому файл можно восстановить байт в байт. Текст сжимается в два-четыре раза, а случайные данные — почти никак: в них нет повторов. Вот почему уже сжатый файл бессмысленно архивировать второй раз — экономии почти не будет.
Как это выглядит на экзамене
Типовые задачи: посчитать объём текста, картинки или звука по формуле и перевести единицы. Разбор: запись длиной 80 секунд с частотой 8000 Гц и глубиной 16 бит занимает 10 240 000 бит, делим на 8 — получаем 1 280 000 байт, ещё раз на 1024 — 1250 Кбайт. Схема всегда одна: перемножить множители, потом спуститься по единицам. Второй тип заданий — про цвета: сколько цветов в картинке с 5-битным пикселем? Двойка в пятой — 32. Обратная задача: глубина цвета для 64 цветов — 6 бит, потому что двойка в шестой равна 64.
Обратные задачи: от веса к частоте
Обратные задачи встречаются постоянно: известен вес — найди частоту. Например, секунда моно-звука весит 32 000 байт при глубине 16 бит на замер: 32 000 умножить на 8 — это 256 000 бит, делим на 16 и получаем 16 000 замеров, то есть частота 16 000 Гц. Тот же приём работает для картинок: известен вес и глубина цвета — делим и находим число пикселей.
- Кодировка#
- Таблица соответствия символов и чисел
- ASCII#
- Американский стандарт 1963 года: 128 символов по 7 бит
- Unicode#
- Единая таблица символов мировой письменности, более 140 тысяч знаков
- UTF-8#
- Формат записи Unicode: от 1 до 4 байт на символ
- Глубина цвета#
- Число бит, отведённых на один пиксель
- Дискретизация#
- Замеры непрерывного сигнала через равные промежутки времени
- Текст: число символов и байт на символ (кодировка)
- Картинка: число пикселей и глубина цвета
- Звук: частота дискретизации, бит на замер, число каналов и длительность
- Любой файл: формат сжатия может уменьшить объём в разы
Текст из 2000 символов набран в кодировке, где символ весит 2 байта. Прикинь вес файла в байтах.
Проверь себя
Клавиши 1–9 выбирают вариант, Enter — «Проверить»
1 Сколько бит нужно, чтобы закодировать один из 256 цветов?
2 Картинка 100 на 100 пикселей с глубиной цвета 24 бита. Сколько байт она займёт без сжатия?
3 Что делает дискретизация со звуком?
4 Слово из 10 символов в кодировке, где символ весит 2 байта, займёт...
5 Частота дискретизации 8000 Гц означает, что громкость звука измеряют...
6 Во сколько раз вырастет вес фото, если глубину цвета поднять с 8 до 24 бит?
7 Какая это графика?
Разложи элементы по категориям: нажми на элемент, потом на категорию.
8 Вставь пропущенное.
Выбери подходящее слово в каждом пропуске.
Глубина цвета — это количество бит на , а при дискретизации звука через равные промежутки времени измеряется сигнала
Было понятно? Скажи — так мы видим, какие темы переписать.
Частые вопросы
Сколько байт занимает один символ текста?
В старой кодировке ASCII — 1 байт, в Unicode русская буква занимает 2 байта. Поэтому один и тот же текст в разных кодировках весит по-разному.
Что такое глубина цвета?
Это число бит, которыми закодирован один пиксель. 8 бит дают 256 цветов, а 24 бита — около 16,7 миллиона оттенков.
Как оцифровывается звук?
Компьютер измеряет громкость волны через равные промежутки — при частоте 44100 Гц это 44100 замеров в секунду — и каждый замер записывает числом. Чем чаще замеры, тем точнее звук.
Чем JPEG отличается от PNG?
JPEG сжимает фотографии с потерями, отбрасывая детали, которых глаз почти не замечает, поэтому файл получается маленьким. PNG хранит картинку без потерь и выигрывает на скриншотах, схемах и изображениях с резкими краями.