Компьютерная графика и тексты
Чем растровая графика отличается от векторной, как кодируется цвет в модели RGB и почему фотография весит в тысячи раз больше текста — считаем байты.
Флешка на 16 ГБ, фото с классной прогулки — 3 МБ каждое, а конспект всех уроков текстом — меньше 1 МБ. Почему картинка «весит» в тысячи раз больше абзаца? Всё дело в способе кодирования. Растровый рисунок — мозаика из пикселей, квадратиков, у каждого свой цвет. Сфотографировал окно — камера запомнила цвет каждой клетки сетки. Векторный рисунок — чертёж: «окружность радиуса 40 с центром в точке (100, 100)». Хранятся формулы, а не точки.
Видео доводит идею до предела: одна минута записи с телефона занимает сотни мегабайтов, потому что это 30 кадров в секунду, а каждый кадр — отдельный растр. Отсюда жизненная пропорция: текст — копейки, фотография — рубли, минута видео — тысячи. Дальше разберёмся, откуда берутся такие цифры и как их считают в задачах.
Почему вектор не портится, а растр — да
Увеличь растровую фотографию в пять раз — каждый пиксель растянется в большой квадрат, на краях появятся «лестницы». Векторному масштабу нечего портить: программа пересчитает координаты под новый размер, и контур останется гладким. Поэтому эмблемы, шрифты и схемы чертят в векторных редакторах, а фотографии сохраняют растром: мозаика из миллионов пикселей передаёт плавные переходы цвета, которые формулами не опишешь.
Растр и вектор лицом к лицу
| Признак | Растр | Вектор |
|---|---|---|
| Из чего состоит | из пикселей | из математических описаний фигур |
| Что при увеличении | пиксели растут, видны квадратики | контуры пересчитываются, картинка чёткая |
| Объём при большом размере | растёт быстро: за каждый пиксель платим битами | почти не растёт: формула короче рисунка |
| Типичные файлы | фотографии, сканы, скриншоты | логотипы, схемы, шрифты |
Кодирование цвета и объём данных
Цвет пикселя обычно собирают из трёх каналов — это модель RGB: красный, зелёный, синий. На канал отводится 8 бит, значит значений от 0 до 255, а всего — больше 16 миллионов цветов, режим True Color. Объём растра считает формула : количество пикселей умножить на биты одного пикселя. Картинка 100 на 100 пикселей по 1 байту — это 10 000 байт. С текстом проще: в однобайтовой кодировке символ занимает 1 байт (256 вариантов), в Unicode — 2 байта, зато хватает на все алфавиты мира.
Глубина цвета: от двух цветов до миллионов
Сколько бит отдать одному пикселю — выбирает тот, кто сохраняет файл. Чёрно-белому скану документа хватает одного бита: пиксель либо чёрный, либо белый. Рисункам старых игр хватало четырёх бит — 16 цветов. Восемь бит дают 256 оттенков — так устроена палитра GIF-анимации. Настоящие фотографии хранят True Color: 24 бита на пиксель, по восемь на каждый канал RGB. Правило связывает биты и цвета: 2 в степени i — число доступных цветов, где i — биты на пиксель. Обратная задача решается подбором степени: в палитре 32 цвета — значит, на пиксель нужно 5 бит, потому что 2 в пятой равно 32.
| Бит на пиксель | Сколько цветов | Где встречается |
|---|---|---|
| 1 | 2 | чёрно-белый скан документа |
| 4 | 16 | рисунки старых игр и схем |
| 8 | 256 | палитра GIF-анимации |
| 24 | 16,7 млн | фотографии в режиме True Color |
Почему выбраны именно красный, зелёный и синий? Так устроен глаз: в сетчатке есть три вида колбочек, чувствительных примерно к этим трём участкам спектра. Смешивая свет трёх прожекторов разной яркости, можно получить почти любой оттенок — на этом и стоит модель RGB: 255 в красном канале при нулях в остальных даёт чистый красный цвет, нули во всех трёх — чёрный, полное отсутствие света. Экран телефона — просто матрица из миллионов таких трио светящихся точек, а калькулятор цвета в графическом редакторе показывает те самые три числа от 0 до 255.
- Считаем пиксели: 640 умножить на 480 — получится 307 200.
- True Color — это 24 бита на пиксель, то есть 3 байта.
- Умножаем: 307 200 пикселей на 3 байта — 921 600 байт.
- Переводим в килобайты делением на 1024: получается 900 КБ.
- Ответ: около 900 КБ, чуть меньше мегабайта — типичный вес фотографии на телефоне.
Кодировки текста: от ASCII к Unicode
Текст кодируется проще картинки. Первая кодировка ASCII отводила символу 7 бит — 128 значений: латиница, цифры, знаки препинания и управляющие команды для принтеров. Русским буквам места не нашлось, поэтому придумали однобайтовые кодировки вроде Windows-1251: 256 вариантов, половина отдана кириллице. Проблема: в мире десятки алфавитов, и под каждый заводили свою кодировку — документ, сохранённый в одной, в другой открывался кашей из знаков вопроса. Решением стал Unicode: единая таблица на все письменности планеты, где каждый символ получил свой номер. В практической кодировке UTF-8 латинская буква занимает 1 байт, а русская — 2: поэтому русский текст того же смысла весит вдвое больше английского.
Формат файла подсказывает, как рисунок устроен внутри. JPEG — растр для фотографий: миллионы оттенков и приличное сжатие, но при сильном сжатии вокруг контуров появляются мутные пятна. PNG — растр с поддержкой прозрачности: идеален для скриншотов и картинок с текстом. GIF — растр с палитрой до 256 цветов, зато умеет анимацию. SVG — вектор: логотипы и иконки в нём масштабируются без потерь. Выбирая формат, спроси себя: что важнее — плавные переходы цвета или чёткие контуры при любом масштабе.
- Фото с камеры — растр в JPEG: нужен весь спектр оттенков
- Скриншот с текстом — PNG: буквы остаются резкими
- Анимированная картинка — GIF: палитра ограничена, зато кадры переключаются
- Логотип канала — SVG: масштабируется от аватарки до билборда
- Чертёж детали — вектор: линии должны остаться линиями при любом зуме
Отдельный трюк, из-за которого файлы «худеют», — сжатие. JPEG ищет повторяющиеся участки и выбрасывает детали, которые глаз почти не различает: фотография весит не 900 КБ, а 150, и разница почти незаметна. PNG сжимает без потерь: каждый пиксель восстанавливается ровно таким, каким был. Отсюда правило выбора: фотографиям — JPEG, скриншотам и чертежам — PNG, потому что сжатие с потерями размазывает тонкие линии и буквы.
- Пиксель#
- наименьший элемент растрового изображения, квадратик одного цвета
- Растр#
- сетка пикселей, из которой собран рисунок
- Векторная графика#
- рисунок как описание фигур: координаты, радиусы, цвета
- Глубина цвета#
- число бит, отведённых одному пикселю под цвет
- Разрешение#
- число пикселей по ширине и высоте изображения
- Кодировка#
- таблица соответствия символов и их числовых номеров
Как это спрашивают: обратные задачи
Контрольные любят обратную задачу: объём известен — найди размер. Файл занимает 6 КБ при глубине цвета 24 бита и ширине 128 пикселей. Переводим: 6 КБ — это 6 * 1024 = 6144 байта, то есть 49 152 бита. Делим биты на глубину цвета: 49 152 / 24 = 2048 пикселей всего. Делим на ширину: 2048 / 128 = 16. Высота картинки — 16 пикселей. Все три действия выросли из одной формулы: объём равен ширине, умноженной на высоту и на глубину цвета, — просто в обратной задаче мы выражаем разные части.
С текстом работает та же логика. Три страницы по 40 строк и 60 символов в кодировке Unicode: 3 40 60 = 7200 символов, каждый по 2 байта — 14 400 байт, примерно 14 КБ. Заметь, как быстро считается: страницы, строки и символы перемножаются, потом всё умножается на вес одного символа. Эта схема сидит в половине задач на кодирование текста.
| Объект | Примерный объём | Как считаем |
|---|---|---|
| символ текста | около 1 байта | 256 вариантов — это 2 в восьмой степени |
| страница А4 | около 2 КБ | примерно 2000 знаков по 1 байту |
| роман в 200 страниц | около 0,4 МБ | 200 страниц умножить на 2 КБ |
| пиксель True Color | 3 байта | по 8 бит на каждый канал: красный, зелёный, синий |
Нажми на элемент, затем на категорию. Нажми на разложенный элемент — вернётся в пул.
Проверь себя
Клавиши 1–9 выбирают вариант, Enter — «Проверить»
1 Изображение размером 100 на 100 пикселей, на каждый пиксель отводится 1 байт. Каков объём файла в байтах?
2 Какая графика не теряет качество при увеличении?
3 В модели RGB каждый из трёх каналов при 8 битах принимает 256 значений.
4 Соедини термин с его смыслом.
Нажми на элемент слева, затем на его пару справа. Повторное нажатие отменяет связь.
5 Текст из 40 строк по 60 символов записан в однобайтовой кодировке. Каков объём текста в байтах?
6 Палитра содержит 16 цветов. Сколько бит нужно на один пиксель?
7 Растр или вектор?
Разложи элементы по категориям: нажми на элемент, потом на категорию.
8 Вставь пропущенное.
Выбери подходящее слово в каждом пропуске.
Пиксель — наименьший элемент , а палитру из 16 цветов кодируют битами на пиксель
Было понятно? Скажи — так мы видим, какие темы переписать.
Частые вопросы
Чем растровая графика отличается от векторной простыми словами?
Растр — мозаика из цветных точек-пикселей, вектор — чертёж из формул. Растр идеален для фото, вектор — для логотипов и схем, которые нужно масштабировать.
Почему фотография весит больше, чем текст?
В фотографии тысячи пикселей, и на каждый нужно несколько байт под цвет. В тексте символ стоит 1-2 байта, а символов на странице всего пара тысяч.
Сколько символов вмещает однобайтовая кодировка и почему её не хватает?
256 символов: 2 в восьмой степени. Для русского и английского хватает, а для греческого, арабского и иероглифических письмен нужен Unicode, где символ весит 2 байта и больше.
Почему JPEG весит меньше, чем BMP с той же картинкой?
JPEG сжимает с потерями: выбрасывает детали, которые глаз почти не различает. BMP хранит каждый пиксель целиком без сжатия, поэтому файл выходит в десятки раз больше.