Сжатие файлов
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.txt
bytes 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