Прорисовка букв и цифр. шрифты

Поскольку символьная информация выглядит как картинка, то формы хранения их аналогичны. Шрифты бывают растровые и масштабируемые. Windows, например, использует три вида шрифтов (фонтов):

1. Растровые шрифты - они хранятся на диске в виде набора битов, отображающих пикселы (точки) на экране. Размер шрифта в этом случае не может быть изменен. Данный шрифт используется для изображения текста на экране, но некоторые типы принтеров в состоянии их печатать (файлы, содержащие растровые шрифты, имеют расширение имени FON).

2. Векторные шрифты - в них формирование знаков осуществляется исключительно путем соединения точек. Каждый символ состоит из набора точек, соединенных линиями таким образом, что образуется контур символа. Векторные шрифты могут легко масштабироваться путем изменения пропорций между точками, что приводит к изменению длин линий между ними. При малых размерах качественное воспроизведение данных шрифтов затруднено, так как они образованы небольшим количеством точек. Эти шрифты очень удобны при выводе на плоттер. Windows при поставке инсталлирует, например, векторные шрифты Roman, Script и Modern (их файлы имеют расширения FON).

3. Шрифты TrueType - это шрифты, являющиеся дальнейшим развитием технологии векторных шрифтов. Символы TrueType создаются также методом построения контура знака, но, кроме этого, содержат наборы рекомендаций (хинтов), содержащих информацию о том, как модифицировать форму малоразмерных знаков, которые надо изображать на экране или принтере. Одним из главных достоинств шрифтов TrueType является возможность их печати практически на любом принтере, если только Windows обеспечивает для этого принтера универсальный драйвер. Файлы шрифтов TrueType в Windows имеют расширение TTF.

Важными характеристиками шрифта являются его высота и засечки (серифы). Высота (кегль) знака измеряется в пунктах. В России пункт составляет 0,376 мм (1/72 французского дюйма), тогда как в США и Великобритании - 0,351 мм (1/72 английского дюйма). Засечки - это выступы на концах букв. Они повышают читабельность шрифта при малой его величине, плохом качестве печати. Шрифт без засечек используется в заголовках, этикетках, то есть там, где используется большой размер или малый объем печати. Также шрифты могут быть пропорциональными (разноширинные) и моноширинные. В Windows-приложениях предусмотрены три опции для задания ширины знаков: нормальный, широкий и узкий. Это важно, если используемое приложение не имеет средств кернинга - настройки пространства между знаками.

Представление звуков

Существует два подхода к хранению звуковых файлов – это MIDI (Music Interface Digital Instrument) и подобные, и оцифрованный звук.

В формате MIDI звук генерируется синтезатором, который порождает звуки различного тембра, высоты, длительности и громкости. Тембры, как правило, соответствуют тембрам распостраненных музыкальных инструментов. Вместо звука в данном случае хранится последовательность команд синтезатора. Используя данный подход, можно хранить фонемы человеческого языка и воспроизводить речь. Достоинством данного формата является его компактность, а недостатком – зависимость качества звучания от качества синтезатора, реализованного в конкретной звуковой карте.

Оцифрованный звук является результатом аналого-цифрового преобразования реального звука. Его характеристиками являются частота дискретизации, разрешение АЦП и количество каналов. Например, в формате цифрового звука лазерных дисков есть два канала (стереозвук), частота дискретизации 44,1 КГц, количество бит АЦП на канал – 16. Для записи речи вполне хватает частоты дискретизации 22 КГц, а просто для разборчивости произносимых фраз без узнавания говорящего – и 10 КГц. Поскольку данные в этом формате занимают много памяти (в формате лазерного аудиодиска одна минута – это примерно 9 МБт данных), то используются упакованные данные. Наиболее применяемым в настоящее время является формат MPEG-3.

Упаковка данных

Часто данные имеют значительный объем, поэтому их хранение и передача требует значительных ресурсов. Одним из способов решения этой проблемы является упаковка данных.

В основе всех способов упаковки лежит теория информации: данные, в которых имеется статистическая автокорреляция, называется избыточной или имеющей низкую энтропию. В этом случае объем данных можно уменьшить без потери смысла, а зачастую и с возможностью полного восстановления исходных данных. Методы повышения энтропии, которые не позволяют по упакованному потоку восстановить исходный, называются необратимыми, приблизительными или сжимающими с потерями (losing compression). Соответственно методы, которые позволяют это сделать, называются обратимыми, точными или сжимающими без потерь (losless compression).

Одним из первых методов упаковки является азбука Морзе (1844г.). В ней наиболее использующиеся буквы кодировались наиболее короткими посылками.

В конце 1940-х годов основателем современной информации Шенноном был разработан универсальный алгоритм построения оптимальных кодов. Более известный аналог этого алгоритма был предложен позднее Хаффманом. Принцип построения этих кодов в целом соответствует логике Морзе – кодировать наиболее повторяющиеся последовательности наиболее короткими последовательностями битов.

Коды Хаффмана и Шеннона-Фано устраняют автокорреляции, соответствующие неравномерности встречаемых символов, но сохраняют без изменений часто встречающиеся последовательности символов, а они ответственны за значительную часть избыточности текстов на естественных и синтетических языках. Для упаковки данных такого рода в конце 1970-х годов Лемпелем и Зиффом было предложено семейство алгоритмов, наиболее известные из которых – LZ77 и LZW. Все эти алгоритмы сводятся к поиску в потоке повторяющихся последовательностей и замене этих последовательностей на их номер в динамически формируемом словаре. Различие этих алгоритмов состоит в способах кодирования номера и формировании словаря. Номер последовательности в словаре должен содержать больше битов, чем символы исходного потока хотя бы из-за того, чтобы его можно было отличить от символа, поэтому алгоритмы Лемпеля-Зиффа предполагают дальнейшее перекодирование преобразованного потока кодом Хаффмана. Большинство современных архиваторов, таких, как PkZip, GNU Zip, RAR, основаны на вариациях и аналогах алгоритмов Лемпеля-Зиффа.

При упаковке нетекстовых данных могут применяться и другие способы удаления повторений. Например, при упаковке растровых изображения широко используется метод RLE (Run-Length Encoding), когда повторяющиеся пикселы заменяются счетчиком повторений и значением пиксела.

Наиболее универсальны арифметические алгоритмы, которые находят и устраняют все автокорреляции, присутствующие во входных данных. Из-за больших вычислительных затрат эти алгоритмы не получают широкого распостранения.

Все перечисленные алгоритмы способны только устранить автокорреляции, уже существующие во входном потоке. Если их нет, то упаковки тоже нет, поэтому эти алгоритмы не могут гарантировать уровень упаковки.

Для упаковки данных, полученных путем оцифровки реальных сигналов, например, видео и звука, эти алгоритмы не подходят совершенно. Это связано с тем, что реальный сигнал всегда сопровождается тепловым (белым) шумом. Этот не имеющий автокорреляций шум искажает присутствующие во входном потоке автокорреляции, поэтому точные алгоритмы с зашумленным сигналом справиться не могут. Поэтому упаковка аудиозаписи или цифровой фотографии алгоритмами класса Zip или RAR не даст большого результата (а на текстовых данных эти алгоритмы часто дают выигрыш в 10 и более раз). Идея алгоритмов, пригодных для сжатия зашумленных сигналов, пришла из области работы цифровых фильтров-шумоподавителей. Эти фильтры осуществляют над сигналом преобразование Фурье и удаляют из полученного спектрального образа самые слабые частоты, которые ниже порога подавления. Сигнал при этом искажается и наиболее страдают составляющие равномерно распределенного по спектру шума, что и требуется. Алгоритмы JFIF (он находится в основе формата JPEG), MPEG, MP3 и другие алгоритмы тоже начинают с выполнения над входным потоком преобразования Фурье. Далее алгоритм JFIF удаляет из полученного спектра фиксированное количество частот, стремясь отобрать самые слабые. Количество частот, которые надо выкинуть, определяется параметром настройки упаковщика. У JFIF этот параметр называется коэффициентом упаковки, у MP3 – битрейтом. Профильтрованный сигнал заведомо содержит автокорреляции и поэтому легко подвергается упаковке. Благодаря этому все эти алгоритмы обеспечивают гарантированный уровень упаковки. Все эти алгоритмы относятся к классу необратимых, так как восстановить по нему исходный сигнал невозможно. При разумном выборе уровня упаковки восстановленное изображение или звук практически неотличимо от оригинала, но если это восстановленное изображение или звук еще раз пропустить через упаковку, то будет заметно искажение исходного потока данных. Поэтому иногда необратимые алгоритмы упаковки предлагается использовать для защиты авторских прав: потребитель получает упакованный файл, а исходный остается у автора.

Экспериментальные варианты необратимых алгоритмов вместо разложения по взвешенной сумме синусов и косинусов используют разложение по специальным функциям, так называемым вэйвлетам (wavelet). Утверждается, что вэйвлетная фильтрация при том же уровне сжатия дает меньший уровень субъективно обнаружимых искажений. При этом вэйвлетные алгоритмы сильно уступают обычным вариациям JFIF по производительности, поэтому пока не нашли широкого применения.

Наши рекомендации