Объясните почему с некоторого момента при повторном сжатии файла его размер увеличивается
Сжатие файлов позволяет быстрее передавать, получать и хранить большие файлы. Оно используется повсеместно и наверняка хорошая вам знакомо: самые популярные расширения сжатых файлов — ZIP, JPEG и MP3. В этой статье кратко рассмотрим основные виды сжатия файлов и принципы их работы.
Что такое сжатие?
Сжатие файла — это уменьшение его размера при сохранении исходных данных. В этом случае файл занимает меньше места на устройстве, что также облегчает его хранение и передачу через интернет или другим способом. Важно отметить, что сжатие не безгранично и обычно делится на два основных типа: с потерями и без потерь. Рассмотрим каждый из них по отдельности.
Сжатие без потерь
Сжатие без потерь позволяет уменьшить размер файла так, чтобы в дальнейшем можно было восстановить первоначальное качество. В отличие от сжатия с потерями, этот способ не удаляет никакую информацию. Рассмотрим простой пример. На картинке ниже стопка из 10 кирпичей: два синих, пять жёлтых и три красных.
Вместо того чтобы показывать все 10 блоков, мы можем удалить все кирпичи одного цвета, кроме одного. Используя цифры, чтобы показать, сколько кирпичей каждого цвета было, мы представляем те же данные используя гораздо меньше кирпичей — три вместо десяти.
Это простая иллюстрация того, как осуществить сжатие без потерь. Та же информация сохраняется более эффективным способом. Рассмотрим реальный файл: mmmmmuuuuuuuoooooooooooo. Его можно сжать до гораздо более короткой формы: m5u7o12. Это позволяет использовать 7 символов вместо 24 для представления одних и тех же данных.
Практическая работа № 2.
Алгоритм RLE
1. Используя алгоритм RLE, закодируйте последовательность символов
BBBBBBACCCABBBBBB
Запишите результат в виде шестнадцатеричных кодов (каждый символ кодируется в виде байта, который представлен двумя шестнадцатеричными цифрами ). Проверьте полученный результат с помощью программы RLE.
2. Раскодируйте последовательность, упакованную с помощью алгоритма RLE (приводятся шестнадцатеричные коды): 01 4D 8 E 41 01 4 D 8 E 4116. Для определения символов по их шестнадцатеричным кодом используйте таблицу ASCII . В приведённой таблице в первом столбце записана первая цифра шестнадцатеричного кода символа, а в первой строке – вторая. Например, символ «&» имеет шестнадцатеричный код 2616.
Где используется сжатие без потерь
ZIP-файлы — популярный пример сжатия без потерь. Хранить информацию в виде ZIP-файлов более эффективно, при этом когда вы распаковываете архив, там присутствует вся оригинальная информация. Это актуально для исполняемых файлов, так как после сжатия с потерями распакованная версия будет повреждена и непригодна для использования.
Другие распространённые форматы без потерь — PNG для изображений и FLAC для аудио. Форматы видео без потерь встречаются редко, потому что они занимают много места.
Практическая работа № 2.
Алгоритм RLE
1. Используя алгоритм RLE, закодируйте последовательность символов
BBBBBBACCCABBBBBB
Запишите результат в виде шестнадцатеричных кодов (каждый символ кодируется в виде байта, который представлен двумя шестнадцатеричными цифрами ). Проверьте полученный результат с помощью программы RLE.
2. Раскодируйте последовательность, упакованную с помощью алгоритма RLE (приводятся шестнадцатеричные коды): 01 4D 8 E 41 01 4 D 8 E 4116. Для определения символов по их шестнадцатеричным кодом используйте таблицу ASCII . В приведённой таблице в первом столбце записана первая цифра шестнадцатеричного кода символа, а в первой строке – вторая. Например, символ «&» имеет шестнадцатеричный код 2616.
Запишите результат в виде шестнадцатеричных кодов (каждый символ кодируется в виде байта, который представлен двумя шестнадцатеричными цифрами ). Проверьте полученный результат с помощью программы RLE.
2. Раскодируйте последовательность, упакованную с помощью алгоритма RLE (приводятся шестнадцатеричные коды): 01 4D 8 E 41 01 4 D 8 E 4116. Для определения символов по их шестнадцатеричным кодом используйте таблицу ASCII . В приведённой таблице в первом столбце записана первая цифра шестнадцатеричного кода символа, а в первой строке – вторая. Например, символ «&» имеет шестнадцатеричный код 2616.
66.67 % коэффициент сжатия, MAAAAAAAAAAAAAAMAAAAAAAAAAAAAA
3. Определите количество байтов в исходной и распакованной последовательности (см. предыдущее задание) и вычислите коэффициент сжатия:
Сжатая последовательность
Несжатая последовательность
Коэффициент сжатия
4. Проверьте результат, полученный в предыдущем пункте, с помощью программы RLE. Предложите два способа проверки.
1.Сжатие без потерь и 2. сжатие с потерей
5. Постройте последовательности, которые сжимаются алгоритмом RLE ровно в 2 раза, в 4 раза, в 5 раз. Проверьте свои ответы с помощью программы RLE.
Несжатая последовательность
Сжатая последовательность
Коэффициент сжатия
6. Придумайте три последовательности, которые невозможно сжать с помощью алгоритма RLE:
Несжатая последовательность
«Сжатая» последовательность
Коэффициент сжатия
7. Используя программу RLE, примените RLE-сжатие к следующим файлам и найдите для каждого из них коэффициент сжатия:
Размер без сжатия
Размер после сжатия
Коэффициент сжатия
grad _ vert . bmp
grad _ horz . bmp
grad _ diag . jpg
8. Объясните результаты, полученные в предыдущем пункте:
· почему не удается сжать рисунки в формате JPEG?
Потому, что jpeg - это уже сжатые данные. Причём сжатые куда эффективнее, чем может обеспечить RLE.
· почему для двух рисунков в формате BMP одинакового размера коэффициенты сжатия по алгоритму RLE так сильно отличаются? Подсказка: откройте эти рисунки в любой программе просмотра.
Степень сжатия зависит от размера последовательности одинаковых байт, а не от размера файла. Чем она длиннее тем лучше сжатие, от самой картинки зависит так же как и архивирование, размер исходного файла может быть один и тот же, а коэффициент сжатия сильно отличаться
9. Оцените максимально достижимый коэффициент сжатия с помощью рассмотренного в учебнике варианта RLE-алгоритма. В каком случае его удастся достичь?
Максимальное значение при одной длинной серии, минимальное при отсутствии серий
10. Оцените коэффициент сжатия с помощью RLE-алгоритма в худшем случае. Опишите этот худший случай.
В худшем случае размер сжатых данных окажется больше исходного размера. Для кодирования пробега с помощью алгоритма RLE требуется информация, состоящая не менее чем из двух символов. В связи с чем запуск одиночных символов на самом деле занимает больше места. По тем же причинам данные, состоящие полностью из 2-символьных прогонов, остаются неизменными после кодирования.
При выполнении этой работы используются программы RLE (алгоритм сжатия RLE) и Huffman (кодирование Хаффмана и Шеннона-Фано).
1. Запустите программу Huffman.exe и закодируйте строку «ЕНОТ НЕ ТОНЕТ», используя методы Шеннона-Фано и Хаффмана. Запишите результаты в таблицу:
Как, по вашему мнению, будет изменяться коэффициент сжатия при увеличении длины текста, при условии, что набор символов и частота их встречаемости останутся неизменной? Проверьте ваш вывод с помощью программы (например, можно несколько раз скопировать ту же фразу).
2. Используя кнопку Анализ файла в программе Huffman, определите предельный теоретический коэффициент сжатия для файла a.txt при побайтном кодировании.
3. С помощью программ RLE и Huffman выполните сжатие файла a.txt разными способами. Запишите результаты в таблицу:
4. Используя кнопку Анализ файла в программе Huffman, определите предельный теоретический коэффициент сжатия для файла a.txt.huf при побайтном кодировании. Объясните результат.
5. Примените несколько раз повторное сжатие этого файла с помощью алгоритма Хаффмана (новые файлы получат имена a.txt.huf2, a.txt.huf3 и т.д.) и заполните таблицу, каждый раз выполняя анализ полученного файла.
Объясните, почему с некоторого момента при повторном сжатии файла его размер увеличивается.
6. Выполните те же действия, используя метод Шеннона-Фано.
Объясните, почему с некоторого момента при повторном сжатии файла его размер увеличивается.
7. Сравните результаты сжатия этого файла с помощью алгоритма RLE, лучшие результаты, полученные методами Шеннона-Фано и Хаффмана, а также результат сжатия этого файла каким-нибудь архиватором.
Практическая работа № 1.
Оформление документа
Скопируйте в свой каталог документ ТЕХ.doc и оформите его следующим образом:
1. Установите для всего документа рубленый шрифт ( Arial , Helvetica , Calibri ) размером 12 пт.
2. Примените к заголовку стиль Заголовок 1. Измените этот стиль следующим образом:
· размер шрифта 16 пт;
· выравнивание по центру;
· нижняя сплошная граница для абзаца.
3. Установите для остальных абзацев отступ 1 см и выравнивание по ширине.
4. Включите автоматическую расстановку переносов.
5. Замените кавычки " " на «».
6. Создайте макрос с именем ТеХ, который должен вводить название TEX и устанавливать смещение вниз для буквы «Е»: T E X. После выполнения макроса курсор должен стоять справа от буквы Х. Назначьте макросу какое-нибудь сочетание клавиш, например, Alt+Ctrl+Shift+T. С помощью этого макроса заменить о всем тексте название TEX на T E X.
7. Добавьте в текст после слов «корней квадратного уравнения» формулу для вычисления корней квадратного уравнения в виде отдельного абзаца.
8. Добавьте фото Д. Кнута (файл Knuth . jpg ), обрежьте фотографию, чтобы выделить лицо. Добавьте подпись, установите для всего блока фотография + подпись обтекание вокруг рамки (используйте группировку).
9. Замените в тексте «пи» на греческую букву p .
10. Создайте стиль ТеХ со следующими параметрами:
· моноширинный шрифт ( Courier New , Consolas и т.п.) размером 13 пт;
· левая граница 1 см, правая граница – отступ 1 см от правого края;
· заливка серым цветом;
· тонкая черная рамка со всех сторон абзаца.
и оформите этим стилем формулу, набранную в формате LaТ Е Х.
11. Оформите заголовок «Литература» стилем «Заголовок 2». Информацию о книге Д. Кнута оформите в виде нумерованного списка.
12. Найдите информацию о книге «Все про Т Е Х» на сайте издательства «Вильямс» и сделайте название книги гиперссылкой на найденную страницу. Проверьте работу гиперссылки.
Где используется сжатие с потерями
Как мы уже упоминали, сжатие с потерями отлично подходит для большинства медиафайлов. Это крайне важно для таких компаний как Spotify и Netflix, которые постоянно транслируют большие объёмы информации. Максимальное уменьшение размера файла при сохранении качества делает их работу более эффективной.
Проблемы во время сжатия файлов
Бесполезно конвертировать формат с потерями в формат без потерь. Это пустая трата пространства. Скажем, у вас есть MP3-файл весом в 3 МБ. Преобразование его в FLAC может привести к увеличению размера до 30 МБ. Но эти 30 МБ содержат только те звуки, которые имел уже сжатый MP3. Качество звука от этого не улучшится, но объём станет больше.
Также стоит иметь в виду, что преобразовывая один формат с потерями в аналогичный, вы получаете дальнейшее снижение качества. Каждый раз, когда вы применяете сжатие с потерями, вы теряете больше деталей. Это становится всё более и более заметно, пока файл по существу не будет разрушен. Помните также, что форматы с потерями удаляют некоторые данные и их невозможно восстановить.
Практическая работа № 1.
Оформление документа
Скопируйте в свой каталог документ ТЕХ.doc и оформите его следующим образом:
1. Установите для всего документа рубленый шрифт ( Arial , Helvetica , Calibri ) размером 12 пт.
2. Примените к заголовку стиль Заголовок 1. Измените этот стиль следующим образом:
· размер шрифта 16 пт;
· выравнивание по центру;
· нижняя сплошная граница для абзаца.
3. Установите для остальных абзацев отступ 1 см и выравнивание по ширине.
4. Включите автоматическую расстановку переносов.
5. Замените кавычки " " на «».
6. Создайте макрос с именем ТеХ, который должен вводить название TEX и устанавливать смещение вниз для буквы «Е»: T E X. После выполнения макроса курсор должен стоять справа от буквы Х. Назначьте макросу какое-нибудь сочетание клавиш, например, Alt+Ctrl+Shift+T. С помощью этого макроса заменить о всем тексте название TEX на T E X.
7. Добавьте в текст после слов «корней квадратного уравнения» формулу для вычисления корней квадратного уравнения в виде отдельного абзаца.
8. Добавьте фото Д. Кнута (файл Knuth . jpg ), обрежьте фотографию, чтобы выделить лицо. Добавьте подпись, установите для всего блока фотография + подпись обтекание вокруг рамки (используйте группировку).
9. Замените в тексте «пи» на греческую букву p .
10. Создайте стиль ТеХ со следующими параметрами:
· моноширинный шрифт ( Courier New , Consolas и т.п.) размером 13 пт;
· левая граница 1 см, правая граница – отступ 1 см от правого края;
· заливка серым цветом;
· тонкая черная рамка со всех сторон абзаца.
и оформите этим стилем формулу, набранную в формате LaТ Е Х.
11. Оформите заголовок «Литература» стилем «Заголовок 2». Информацию о книге Д. Кнута оформите в виде нумерованного списка.
12. Найдите информацию о книге «Все про Т Е Х» на сайте издательства «Вильямс» и сделайте название книги гиперссылкой на найденную страницу. Проверьте работу гиперссылки.
Сжатие с потерями vs сжатие без потерь
Теперь, когда мы рассмотрели обе формы сжатия файлов, может возникнуть вопрос, когда и какую следует использовать. Здесь всё зависит от того, для чего вы используете файлы.
Скажем, вы только что откопали свою старую коллекцию компакт-дисков и хотите оцифровать её. Когда вы копируете свои компакт-диски, имеет смысл использовать формат FLAC, формат без потерь. Это позволяет получить мастер-копию на компьютере, которая обладает тем же качеством звука, что и оригинальный компакт-диск.
Позже вы, возможно, захотите загрузить музыку на телефон или старый MP3-плеер. Здесь не так важно, чтобы музыка была в идеальном качестве, поэтому вы можете конвертировать файлы FLAC в MP3. Это даст вам аудиофайл, который по-прежнему достаточно хорош для прослушивания, но не занимает много места на мобильном устройстве. Качество MP3, преобразованного из FLAC, будет таким же, как если бы вы создали сжатый MP3 с оригинального CD.
Тип данных, представленных в файле, также может определять, какой вид сжатия подходит больше. В PNG используется сжатие без потерь, поэтому его хорошо использовать для изображений, в которых много однотонного пространства. Например, для скриншотов. Но PNG занимает гораздо больше места, когда картинка состоит из смеси множества цветов, как в случае с фотографиями. В этом случае с точки зрения размера файлов лучше использовать JPEG.
Заключение
Мы рассмотрели как сжатие файлов с потерями, так и без потерь, чтобы увидеть, как они работают. Теперь вы знаете, как можно уменьшить размер файла и как выбрать лучший способ для этого.
Алгоритмы, которые определяют, какие данные выбрасываются в методах с потерями и как лучше хранить избыточные данные при сжатии без потерь, намного сложнее, чем описано здесь. На эту тему можно почитать больше информации здесь, если вам интересно.
Сжатие с потерями
Такой способ уменьшает размер файла, удаляя ненужные биты информации. Чаще всего встречается в форматах изображений, видео и аудио, где нет необходимости в идеальном представлении исходного медиа. MP3 и JPEG — два популярных примера. Но сжатие с потерями не совсем подходит для файлов, где важна вся информация. Например, в текстовом файле или электронной таблице оно приведёт к искажённому выводу.
MP3 содержит не всю аудиоинформацию из оригинальной записи. Этот формат исключает некоторые звуки, которые люди не слышат. Вы заметите, что они пропали, только на профессиональном оборудовании с очень высоким качеством звука, поэтому для обычного использования удаление этой информации позволит уменьшить размер файла практически без недостатков.
Аналогично файлы JPEG удаляют некритичные части изображений. Например, в изображении с голубым небом сжатие JPEG может изменить все пиксели на один или два оттенка синего вместо десятков.
Чем сильнее вы сжимаете файл, тем заметнее становится снижение качества. Вы, вероятно, замечали такое, слушая некачественную музыку в формате MP3, загруженную на YouTube. Например, сравните музыкальный трек высокого качества с сильно сжатой версией той же песни.
Сжатие с потерями подходит, когда файл содержит больше информации, чем нужно для ваших целей. Например, у вас есть огромный файл с исходным (RAW) изображением. Целесообразно сохранить это качество для печати изображения на большом баннере, но загружать исходный файл в Facebook будет бессмысленно. Картинка содержит множество данных, не заметных при просмотре в социальных сетях. Сжатие картинки в высококачественный JPEG исключает некоторую информацию, но изображение выглядит почти как оригинал.
При сохранении в формате с потерями, вы зачастую можете установить уровень качества. Например, у многих графических редакторов есть ползунок для выбора качества JPEG от 0 до 100. Экономия на уровне 90 или 80 процентов приводит к небольшому уменьшению размера файла с незначительной визуальной разницей. Но сохранение в плохом качестве или повторное сохранение одного и того же файла в формате с потерями ухудшит его.
Посмотрите на этот пример.
Оригинальное изображение, загруженное с Pixabay в формате JPEG. 874 КБ:
Результат сохранения в формате JPEG с 50-процентным качеством. Выглядит не так уж плохо. Вы можете заметить артефакты по краям коробок только при увеличении. 310 КБ:
Исходное изображение, сохранённое в формате JPEG с 10-процентным качеством. Выглядит ужасно. 100 КБ:
Читайте также: