Сжатие файлов

9.2 Сжатие файлов

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

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

Говоря о сжатии, существует два типа:

  • Lossless : никакая информация не удаляется из файла. Сжатие файла и его распаковка оставляет что-то идентичное оригиналу.

  • Lossy : информация может быть удалена из файла. Он сжат таким образом, что при распаковке файла получается файл, немного отличающийся от оригинала. Например, изображение с двумя слегка различающимися оттенками зеленого можно уменьшить, рассматривая эти два оттенка как одинаковые. Часто глаз все равно не может уловить разницу.

Как правило, человеческие глаза и уши не замечают незначительных дефектов изображения и звука, особенно когда они отображаются на мониторе или воспроизводятся через динамики. Сжатие с потерями часто приносит пользу носителям, поскольку приводит к уменьшению размера файлов, и люди не могут отличить оригинал от версии с измененными данными. Для вещей, которые должны оставаться нетронутыми, таких как документы, журналы и программное обеспечение, вам необходимо сжатие без потерь.

Большинство форматов изображений, таких как GIF, PNG и JPEG, реализуют ту или иную форму сжатия. JPEG использует сжатие с потерями, в то время как GIF и PNG сжимаются, но без потерь. Как правило, вы можете решить, какое качество вы хотите сохранить. Более низкое качество приводит к уменьшению размера файла, но после распаковки вы можете заметить такие артефакты, как неровные края или обесцвечивание. Высокое качество будет очень похоже на исходное изображение, но размер файла будет ближе к оригиналу.

Сжатие уже сжатого файла не сделает его меньше. Этот факт часто забывают, когда речь идет об изображениях, поскольку они уже хранятся в сжатом формате. При сжатии без потерь это многократное сжатие не является проблемой, но если вы сжимаете и распаковываете файл несколько раз, используя алгоритм с потерями, в конечном итоге вы получите что-то неузнаваемое.

Linux предоставляет несколько инструментов для сжатия файлов; самый распространенный это gzip. Здесь мы показываем файл до и после сжатия:

sysadmin@localhost:~$ cd Documents
sysadmin@localhost:~/Documents$ ls -l longfile*
-rw-r--r-- 1 sysadmin sysadmin 66540 Dec 20  2017 longfile.txt
sysadmin@localhost:~/Documents$ gzip longfile.txt
sysadmin@localhost:~/Documents$ ls -l longfile*
-rw-r--r-- 1 sysadmin sysadmin 341 Dec 20  2017 longfile.txt.gz

В предыдущем примере есть файл с именем longfile.txtbytes 66540. Файл сжимается вызовом gzipкоманды с именем файла в качестве единственного аргумента. .gzПосле выполнения этой команды исходный файл исчезает, а на его месте остается сжатая версия с расширением . Размер файла теперь 341байты.

Команда gzipпредоставит эту информацию с помощью параметра –l, как показано здесь:

sysadmin@localhost:~/Documents$ gzip -l longfile.txt.gz
         compressed        uncompressed  ratio uncompressed_name
                341               66540  99.5% longfile.txt

Коэффициент сжатия указан как 99.5%, впечатляющее уменьшение благодаря повторяющейся информации в исходном файле. Кроме того, когда файл будет распакован, он будет вызван longfile.txtснова.

Сжатые файлы можно восстановить в первоначальный вид с помощью либо gunzipкоманды, либо gzip –dкоманды . Этот процесс называется декомпрессией . После gunzipвыполнения своей работы longfile.txtфайл восстанавливается до исходного размера и имени файла.

sysadmin@localhost:~/Documents$ gunzip longfile.txt.gz
sysadmin@localhost:~/Documents$ ls -l longfile*
-rw-r--r-- 1 sysadmin sysadmin 66540 Dec 20  2017 longfile.txt

Учти это

Команда gunzip— это просто скрипт, который вызывается gzipс правильными параметрами.

Есть и другие команды, которые работают практически так же, как gzipи gunzip. К ним относятся bzip2и bunzip2, а также xzи unxz.

Команда gzipиспользует алгоритм сжатия данных Lempel-Ziv , в то время как утилиты используют другой алгоритм сжатия, называемый блочной сортировкой Burrows-Wheeler , который может сжимать файлы меньшего размера за счет большего процессорного времени. Эти файлы можно распознать, потому что они имеют расширение или вместо расширения.bzipgzip.bz.bz2.gz

Инструменты xzи unxzфункционально аналогичны цепному алгоритму Лемпеля-Зива-Маркова (LZMA)gzip и gunzipв том, что они используют цепной алгоритм Лемпеля-Зива-Маркова, который может привести к более низкому времени распаковки ЦП, которое находится на одном уровне , обеспечивая при этом лучшие коэффициенты сжатия, обычно связанные с инструментами . Файлы, сжатые с помощью команды, используют расширение.gzipbzip2xz.xz

Last updated