Что такое декомпрессия файлов
Сжатие файлов позволяет быстрее передавать, получать и хранить большие файлы. Оно используется повсеместно и наверняка хорошая вам знакомо: самые популярные расширения сжатых файлов — ZIP, JPEG и MP3. В этой статье кратко рассмотрим основные виды сжатия файлов и принципы их работы.
Что такое сжатие?
Сжатие файла — это уменьшение его размера при сохранении исходных данных. В этом случае файл занимает меньше места на устройстве, что также облегчает его хранение и передачу через интернет или другим способом. Важно отметить, что сжатие не безгранично и обычно делится на два основных типа: с потерями и без потерь. Рассмотрим каждый из них по отдельности.
Сжатие с потерями
Такой способ уменьшает размер файла, удаляя ненужные биты информации. Чаще всего встречается в форматах изображений, видео и аудио, где нет необходимости в идеальном представлении исходного медиа. MP3 и JPEG — два популярных примера. Но сжатие с потерями не совсем подходит для файлов, где важна вся информация. Например, в текстовом файле или электронной таблице оно приведёт к искажённому выводу.
MP3 содержит не всю аудиоинформацию из оригинальной записи. Этот формат исключает некоторые звуки, которые люди не слышат. Вы заметите, что они пропали, только на профессиональном оборудовании с очень высоким качеством звука, поэтому для обычного использования удаление этой информации позволит уменьшить размер файла практически без недостатков.
3–5 декабря, Онлайн, Беcплатно
Аналогично файлы JPEG удаляют некритичные части изображений. Например, в изображении с голубым небом сжатие JPEG может изменить все пиксели на один или два оттенка синего вместо десятков.
Чем сильнее вы сжимаете файл, тем заметнее становится снижение качества. Вы, вероятно, замечали такое, слушая некачественную музыку в формате MP3, загруженную на YouTube. Например, сравните музыкальный трек высокого качества с сильно сжатой версией той же песни.
Сжатие с потерями подходит, когда файл содержит больше информации, чем нужно для ваших целей. Например, у вас есть огромный файл с исходным (RAW) изображением. Целесообразно сохранить это качество для печати изображения на большом баннере, но загружать исходный файл в Facebook будет бессмысленно. Картинка содержит множество данных, не заметных при просмотре в социальных сетях. Сжатие картинки в высококачественный JPEG исключает некоторую информацию, но изображение выглядит почти как оригинал.
При сохранении в формате с потерями, вы зачастую можете установить уровень качества. Например, у многих графических редакторов есть ползунок для выбора качества JPEG от 0 до 100. Экономия на уровне 90 или 80 процентов приводит к небольшому уменьшению размера файла с незначительной визуальной разницей. Но сохранение в плохом качестве или повторное сохранение одного и того же файла в формате с потерями ухудшит его.
Посмотрите на этот пример.
Оригинальное изображение, загруженное с Pixabay в формате JPEG. 874 КБ:
Результат сохранения в формате JPEG с 50-процентным качеством. Выглядит не так уж плохо. Вы можете заметить артефакты по краям коробок только при увеличении. 310 КБ:
Исходное изображение, сохранённое в формате JPEG с 10-процентным качеством. Выглядит ужасно. 100 КБ:
Где используется сжатие с потерями
Как мы уже упоминали, сжатие с потерями отлично подходит для большинства медиафайлов. Это крайне важно для таких компаний как Spotify и Netflix, которые постоянно транслируют большие объёмы информации. Максимальное уменьшение размера файла при сохранении качества делает их работу более эффективной.
Сжатие без потерь
Сжатие без потерь позволяет уменьшить размер файла так, чтобы в дальнейшем можно было восстановить первоначальное качество. В отличие от сжатия с потерями, этот способ не удаляет никакую информацию. Рассмотрим простой пример. На картинке ниже стопка из 10 кирпичей: два синих, пять жёлтых и три красных.
Вместо того чтобы показывать все 10 блоков, мы можем удалить все кирпичи одного цвета, кроме одного. Используя цифры, чтобы показать, сколько кирпичей каждого цвета было, мы представляем те же данные используя гораздо меньше кирпичей — три вместо десяти.
Это простая иллюстрация того, как осуществить сжатие без потерь. Та же информация сохраняется более эффективным способом. Рассмотрим реальный файл: mmmmmuuuuuuuoooooooooooo. Его можно сжать до гораздо более короткой формы: m5u7o12. Это позволяет использовать 7 символов вместо 24 для представления одних и тех же данных.
Где используется сжатие без потерь
ZIP-файлы — популярный пример сжатия без потерь. Хранить информацию в виде ZIP-файлов более эффективно, при этом когда вы распаковываете архив, там присутствует вся оригинальная информация. Это актуально для исполняемых файлов, так как после сжатия с потерями распакованная версия будет повреждена и непригодна для использования.
Другие распространённые форматы без потерь — PNG для изображений и FLAC для аудио. Форматы видео без потерь встречаются редко, потому что они занимают много места.
Сжатие с потерями vs сжатие без потерь
Теперь, когда мы рассмотрели обе формы сжатия файлов, может возникнуть вопрос, когда и какую следует использовать. Здесь всё зависит от того, для чего вы используете файлы.
Скажем, вы только что откопали свою старую коллекцию компакт-дисков и хотите оцифровать её. Когда вы копируете свои компакт-диски, имеет смысл использовать формат FLAC, формат без потерь. Это позволяет получить мастер-копию на компьютере, которая обладает тем же качеством звука, что и оригинальный компакт-диск.
Позже вы, возможно, захотите загрузить музыку на телефон или старый MP3-плеер. Здесь не так важно, чтобы музыка была в идеальном качестве, поэтому вы можете конвертировать файлы FLAC в MP3. Это даст вам аудиофайл, который по-прежнему достаточно хорош для прослушивания, но не занимает много места на мобильном устройстве. Качество MP3, преобразованного из FLAC, будет таким же, как если бы вы создали сжатый MP3 с оригинального CD.
Тип данных, представленных в файле, также может определять, какой вид сжатия подходит больше. В PNG используется сжатие без потерь, поэтому его хорошо использовать для изображений, в которых много однотонного пространства. Например, для скриншотов. Но PNG занимает гораздо больше места, когда картинка состоит из смеси множества цветов, как в случае с фотографиями. В этом случае с точки зрения размера файлов лучше использовать JPEG.
Проблемы во время сжатия файлов
Бесполезно конвертировать формат с потерями в формат без потерь. Это пустая трата пространства. Скажем, у вас есть MP3-файл весом в 3 МБ. Преобразование его в FLAC может привести к увеличению размера до 30 МБ. Но эти 30 МБ содержат только те звуки, которые имел уже сжатый MP3. Качество звука от этого не улучшится, но объём станет больше.
Также стоит иметь в виду, что преобразовывая один формат с потерями в аналогичный, вы получаете дальнейшее снижение качества. Каждый раз, когда вы применяете сжатие с потерями, вы теряете больше деталей. Это становится всё более и более заметно, пока файл по существу не будет разрушен. Помните также, что форматы с потерями удаляют некоторые данные и их невозможно восстановить.
Заключение
Мы рассмотрели как сжатие файлов с потерями, так и без потерь, чтобы увидеть, как они работают. Теперь вы знаете, как можно уменьшить размер файла и как выбрать лучший способ для этого.
Алгоритмы, которые определяют, какие данные выбрасываются в методах с потерями и как лучше хранить избыточные данные при сжатии без потерь, намного сложнее, чем описано здесь. На эту тему можно почитать больше информации здесь, если вам интересно.
Сжатие / декомпрессия файла, упаковка (система Linux)
Во-первых, система общих сжатия Linux
В среде Linux есть много расширений сжатого файла, в основном: «.tar, .tar.gz, .tgz, .gz, star.gz, .tgz, .gz, .z, .bz2, * .xz», потому что Linux поддерживает сжатие очень много инструкций И методы сжатия, используемые в разных инструкциях, не одинаковы, и, конечно, он не сможет сжать / декомпрессировать файлы между собой.
Несколько распространенных расширений сжатого файла:
- Общие инструкции сжатия на Linux являются GZIP, BZIP2 и последним XZ, так как для Compress было подробно.
- Инструкция ZIP под Linux в основном поддерживает Windows Common ZIP (PS: на самом деле, Linux давно имел инструкции по zip).
- Эти инструкции сжатия могут только сжать и распаковать один файл, поэтому для нескольких файлов директивы TAR требуются для «пакета» нескольких файлов в один файл.
1.1 gzip, zcat/zmore/zless/zgrep
ГЦИП можно сказать, что является крупнейшим инструкциями с компрессией приложения! В настоящее время GZIP может разблокировать файлы с сжатым программным обеспечением, таким как Compress, ZIP и GZIP. Что касается имени файла сжатого файла, созданного GZIP, имя файла * .gz.
В настоящее время существует несколько часто используемых операций, таких как:
Примечание. Когда вы используете GZIP для сжатия, исходный файл в состоянии по умолчанию будет сжиматься в имени файла .gz, исходный файл Больше не существует Отказ Это отличается от ситуации друзей, которые используются для использования Windows для использования Windows!
Например: GZIP-C-сервис> Services.gz
ПРИМЕЧАНИЕ: -C может превратить контент данных, изначально преобразованный в сжатый файл, включите его в тип текста на выходе экрана, а затем мы можем использовать выходные данные на экране, обратитесь к выходу для вывода на вывод. Файл не является экраном, поэтому он может создать блокировку сжатия. Конечно, он написан только по имени файла, конечно, лучше всего следовать названию по сокращению газена GZIP! !
- GZIP -D сжатый файл ------ декомпрессионная операция
Например: GZIP -D Service.gz
Примечание. GZIP -D может использоваться для распаковки, непосредственно извлеките сжатый файл, а разбное имя файла состоит в том, чтобы удалить имя после «.gz».
- CAT / более / менее может использовать различные способы прочтения обычных текстовых файлов, а zcat / zmore / zless могут прочитать сжатые файлы, которые сжимаются по простому текстовому файлу таким образом в кошке / более / меньше.
- Вы можете искать ключевые слова в сжатом файле в ZGrep.
1.2 bzip2,bzcat/bzmore/bzless/bzgrep
Если GZIP установлен для замены сжатия и обеспечить лучший соотношение компрессии, то BZIP2 является заменой GZIP и обеспечивает лучшую степень сжатия. Использование BZIP2 почти так же, как GZIP.
1.3 xz, xzcat/xzmore/xzless/xzgrep
Хотя BZIP2 имеет отличное соотношение сжатия, ясно, что некоторые бесплатные разработчики программного обеспечения все еще не удовлетворены, и, следовательно, он запустит XZ это сжатие, чем более высокое программное обеспечение! Использование этого программного обеспечения также почти так же, как GZIP / BZIP2!
Во-вторых, в упаковке инструкции: TAR
Большинство из упомянутых ранее инструкций могут быть сжаты только для одного файла, в то время как TAR может упаковать несколько каталогов или файлов в большой файл и может одновременно сжать этот файл через поддержку GZIP / BZIP2 / XZ!
Это filename.tar.bz2 - наше собственное имя файла, TAR не будет активно генерировать созданное имя файла! Мы должны быть настроены! Так что расширение очень важно! Если [-Z | -J | -J] не добавляется, имя файла предпочтительно является .tar. Если это опция -j, представитель имеет поддержку BZIP2, поэтому имя файла лучше всего принимать .tar.bz2, потому что BZIP2 будет генерировать. Расширение BZ2! Что касается поддержки GZIP -z, имя файла предпочтительно * .tar.gz!
Следовательно, используя TAR для сжатия, операции запросов и декомпрессии, общие команды: (PS: где -v может быть доступен)
Тома файловой системы NTFS поддерживают сжатие файлов отдельно для отдельных файлов. Алгоритм сжатия файлов, используемый файловой системой NTFS, Lempel-Ziv сжатия. Это алгоритм сжатия без потерь , который означает, что при сжатии и распаковке файла данные не теряются, в отличие от таких алгоритмов СЖАТИЯ, как JPEG, при каждом потере данных при каждом сжатии и распаковке данных.
Сжатие данных сокращает размер файла за счет минимизации избыточных данных. В текстовом файле избыточные данные могут часто возникать в таких символах, как символ пробела или обычные гласные, например буквы e и a; Она также может часто возникать в символьных строках. Сжатие данных создает сжатую версию файла путем минимизации избыточных данных.
Каждый тип алгоритма сжатия данных уменьшает избыточные данные уникальным образом. Например, алгоритм шифрования Хаффмана назначает код символам в файле в зависимости от того, как часто встречаются эти символы. Другой алгоритм сжатия, называемый кодированием длины выполнения, формирует значение из двух частей для повторяющихся символов: первая часть указывает количество повторов символа, а вторая часть определяет символ. Другой алгоритм сжатия, известный как Алгоритм Лемпеля-Зив, преобразует строки переменной длины в коды фиксированной длины, которые потребляют меньше пространства, чем исходные строки.
Сжатие файлов файловой системы NTFS
В файловой системе NTFS сжатие выполняется прозрачно. Это означает, что его можно использовать без внесения изменений в существующие приложения. Сжатые байты файла недоступны для приложений; они видят только несжатые данные. Таким образом, приложения, которые открывают сжатый файл, могут обрабатываться так, как будто они не были сжаты. Однако эти файлы не могут быть скопированы в другую файловую систему.
При сжатии файла, размер которого превышает 30 гигабайт, сжатие может не выполняться.
В следующих разделах определяется сжатие файлов файловой системы NTFS.
Библиотеки сжатия и распаковки файлов
Библиотеки сжатия и распаковки файлов принимают существующий файл или файлы и создают файл или файлы, которые являются сжатыми версиями исходных файлов. Сжатие также осуществляется без потерь, но сжатие не прозрачно для приложений. Приложение может обрабатываться только для таких файлов с помощью библиотеки сжатия файлов. Кроме того, единственные операции, которые можно выполнять с такими файлами, — это создание сжатого файла из оригинала и восстановление исходных данных из распакованной версии. Редактирование обычно не поддерживается, и поиск ограничен, если он поддерживается.
Как правило, приложение вызывает функции в Lz32.dll для распаковки данных, сжатых с помощью Compress.exe. Функции также могут обрабатывать файлы без попытки их распаковки.
Функции в Lz32.dll можно использовать для распаковки одного или нескольких файлов. Их также можно использовать для распаковки сжатых файлов в части за раз.
В следующих разделах определяется распаковка файлов, предоставляемых функциями в Lz32.dll:
В этой статье хотелось бы поговорить о функции Windows, позволяющей существенно сэкономить место на жестком диске – функции сжатия. Впервые встроенная функции сжатия появилась в ОС Windows XP, в последующих версиях Windows эта функция неизменно присутствует. Поддерживаются два типа сжатия:
- NTFS сжатие на уровне файловой системы
- Сжатые ZIP-папки (Compressed Folders)
Сжатие NTFS – это архивирование на уровне файловой системы NTFS, выполняется оно прозрачно драйвером файловой системы. NTFS сжатие может применяться к файлам, папкам и дискам целиком. Для этого каждому сжатому объекту присваивается специальный атрибут сжатия (compression state), который указывает сжат файл или нет. У этого типа сжатия есть свои особенности:
- Сжатие NTFS возможно только на разделах с файловой системы NTFS
- При доступе к сжатому файлу или папке осуществляется прозрачная декомпрессия, т.е. пользователь не видит различий между сжатыми и обычными файлами в Windows, и спокойно может копировать, добавлять или удалять файлы в сжатой папке.
- Для отображения объектов, сжатых на NTFS, применяется специальная цветовая схема (по умолчанию, в проводнике имена сжатые файлов отображаются синим цветом)
- Скорость доступа к сжатому файлу ниже, т.к. систем требуется некоторое время на его распаковку (для современных систем такая операция сложностей не создает, так что задержка практически не видна невооруженным взглядом).
- Сжатие более слабое, чем при использовании ZIP-папок или других архиваторов, но скорость его выполнения гораздо выше
Сжатые ZIP-папки подразумевают архивацию файлов встроенной в систему функцией создания zip архивов. Сжатые папки очень похожи на обычные, иногда даже можно забыть, что на самом деле работаешь с ZIP-архивом. Особенности ZIP-папок в Windows:
-
Сжатые ZIP-папки можно создавать как на томах NTFS, так и на томах FAT.
Как сжать папку в Windows
Чтобы включить NTFS сжатие на каталоге, необходимо в проводнике Windows Explorer щелкнуть по нему правой кнопкой мыши и выбрать свойства.
Затем нажать на кнопку Advanced (Другие) и отметить опцию Compress contents to save disk space (Сжимать содержимое для экономии места для диске) и нажать дважды OK.
Система может спросить: хотите ли вы применить изменения только на папку или также и на все подкаталоги (обычно выбирается 2 пункт, Apply changes to this folder, subfolders and files)
В результате имя сжатого каталога и его содержимое будет отображаться в проводнике синим цветом, что означает – к объекту применено NTFS сжатие.
Сравним степень сжатия встроенными средствами Windows
Сравним уровень сжатия различными инструментами, для чего из одной и той же папки (в моем случаем папка содержит документы Excel и Word)сначала создадим zip-архив (правой кнопкой мыши по каталогу Send to->Compressed(zipped) folder), затем на том же каталоге включим NTFS компрессию.
Оригинальный размер папки – 145 Мб
Размер zip-папки 27,4 Мб
Размер папки со включенным NTFS сжатием – 51 Мб (значение поля Size on disk в свойствах сжатой папки)
Т.е. в моем случае сжатие в папку ZIP наиболее эффективно и уменьшило размер каталога, занимаемый им на диске на 81% (в то время, как NTFS сжатие всего на 65%).
Однако со сжатием нужно быть осторожным, оно может привести к ошибке, описанной в статье BOOTMGR is compressed в Windows 7. Кроме того, если включить сжатие на каталоге с большим (очень большим) количеством файлов, то проверка такого диска (chkdsk) может занять ОЧЕНЬ большой период времени, а если проверка диска осуществляется при загрузке, то держитесь, рабочий стол появится не скоро..
Когда операционные системы были проще, а для рядовых пользователей компьютеры рассматривались, скорее всего, в качестве хобби, установка файлов была довольно простым делом. Большинство приложений сопровождались документацией, в которой пользователям указывалось скопировать все необходимые файлы на жесткий диск. Этим все проблемы исчерпывались.
Среда современной операционной системы Windows 2000 значительно сложнее, а рядовой пользователь более заинтересован в выполнении задач, нежели в изучении принципов работы компьютера. Задача удовлетворения таких пользователей существенно усложнила разработку инсталляционных программ. Современная инсталляционная программа имеет дело с такими тонкостями, как сжатые файлы установки и множество версий системных библиотек. Win32 API содержит функции, которые позволяют приложению справляться с подобными затруднениями. Кроме того, этот интерфейс располагает множеством функций, которые помогают приложению обрабатывать сжатые файлы. Эти функции можно использовать в любой ситуации, тем не менее, чаще всего они применяются совместно с инсталляционными пакетами.
Обзор процесса установки файлов
В качестве примера рассмотрим проблему, связанную с наличием нескольких версий библиотеки COMMDLG.DLL (библиотеки стандартных диалоговых окон). Эта библиотека реализует для приложений стандартные диалоговые окна (common dialog boxes). Предположим, пользователь установил новый программный пакет, где используется последняя версия данной библиотеки. Все работает нормально. Затем пользователь приобретает копию приложения, которая до того пролежала на полке несколько месяцев. В этом приложении также используется библиотека COMMDLG.DLL, но ее старая версия. Если инсталляционная программа просто скопирует файл COMMDLG.DLL в систему, устанавливаемое приложение будет работать нормально, однако прежняя программа, требующая более новой версии библиотеки, в дальнейшем корректно функционировать перестанет. Инсталляционная программа создала для пользователя проблему в результате ошибочной замены новой версии библиотеки COMMDLG.DLL предыдущей версией.
Это лишь один из примеров, когда от инсталляционной программы требуется способность учитывать, что некоторые файлы используются несколькими программами, и никогда не следует заменять новую версию более старой. С другой стороны, перед заменой старой версии на более новую имеет смысл запрашивать подтверждение пользователя. Дело в том, что более новые версии общих файлов могут нарушить работу старых программ, и пользователю необходимо предоставить возможность выбора.
Многие из упомянутых проблем решаются при использовании одного из доступных инсталляционных пакетов независимых разработчиков. Эти программы обычно применяют интерпретируемый сценарий, а программные средства независимых разработчиков осуществляют собственно установку приложения. В данной главе рассматриваются интерфейсы (API) Win32, которые помогают написать собственную инсталляционную программу.
Проверка устанавливаемой версии
Как было показано в предыдущем разделе, инсталляционная программа не должна слепо копировать файлы в систему пользователя. Программа должна определять, существует ли в системе версия данного файла, а также ее старшинство по отношению к версии устанавливаемого файла. Именно для этих целей в Windows существуют функции VerFindFile и VerlnstallFile. VerFindFile определяет место, куда приложение должно установить данный файл. Она проверяет наличие копии файла в системе и возвращает информацию, которая затем используется функцией VerlnstallFile. В листинге 29.1 демонстрируется функция, использующая VerFindFile и VerlnstallFile для определения места установки общего файла и его записи.
Листинг 29.1 Установка файла с проверкой версии___________________________________________
Первый параметр функции VerFindFile определяет, является ли файл для данного приложения частным. В листинге 29.1 переменная VFF_ISSHAREDFILE указывает, что данный файл используется несколькими Windows-приложениями. После вызова VerFindFile буфер szDestDir будет содержать рекомендуемое Windows местонахождение нового файла. Буфер szCurDir получит путь предыдущей версии файла. Функция VerFindFile может возвращать одно из значений, перечисленных в табл. 29.5, которая приводится в описании данной функции.
После вызова функции VerFindFile и при отсутствии ошибок приложение может использовать VerlnstallFile для действительной установки файла. Функция VerlnstallFile копирует новый файл во временный, выполняя при необходимости его декомпрессию. Затем она проверяет информацию о версии уже существующего файла. Если VerlnstallFile не обнаруживает проблем, новый файл устанавливается на место исходного. Функция VerlnstallFile возвращает битовую маску, содержащую одно или несколько значений из табл. 29.7. Это значение указывает на успешное завершение либо на сбой процесса установки. Дополнительные сведения содержатся в приводимом ниже описании функции VerlnstallFile.
Читайте также: