2013-06-02 6 views
1

Хорошо, так что я пытаюсь компрессаизображение файл как можно больше для хранения (обратите внимание, прежде чем он сможет просмотреть файл я не-сжиматься это сжатый файл делает не нужно, чтобы быть полезной, она просто должна быть в состоянии быть несжатый) Я хотел бы сделать это в питона, и у меня есть код следующим образом:Python Сжатие файлов

import bz2 
from shutil import copyfileobj 

x = 0 


while True: 
    while x == 0: 
     with open("START.JPG", 'rb') as input: 
      with bz2.BZ2File("END.JPG", 'wb', compresslevel=9) as output: 
       copyfileobj(input, output) 

       print ("STAGE ONE COMPLETE") 
       x = 1 

    while x == 1: 
     with open("END.JPG", 'rb') as input: 
      with bz2.BZ2File("FINAL.JPG", 'wb', compresslevel=9) as output1: 
       copyfileobj(input, output1) 

       print ("STAGE TWO COMPLETE") 
       x = 2 

до сих пор это не сжимать изображение вниз, но только примерно на 1/3 МБ, я думал, сжав сжатый файл, я мог бы по сжимаю его дальше, однако, когда я это делаю, файл FINAL.JPG больше, чем мой первый сжатый файл. Поэтому мой вопрос: что является лучшим способом сжать файл (я знаю, что разные типы файлов требуют немного другого сжатия, и моя конечная цель заключается в сжатии аудиофайлов MP3), и почему мой сжатый файл становится больше, когда я сжать его во второй раз ?, Также как небольшой я могу сделать один из этих файлов, прежде чем он станет неспособным к сжатию?

Заранее благодарю за всю помощь, я уверен, что я получу!

+0

Как раз мысль о моем чтении при сжатии, не было бы наиболее эффективным использование памяти? Я никогда не работал с этим, но я предполагаю, что это то, с чем я должен быть знаком. –

ответ

4

Файлы изображений JPEG и аудиофайлы в формате MP3 уже сжаты. Помимо некоторых метаданных (таких как EXIF-теги на изображениях JPEG), которые хранятся в несжатом формате, алгоритм сжатия практически не продвинется к этим типам файлов.

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

+0

Мне было интересно об этом. Означает ли это, что нет возможности хранить файлы MP3 более эффективно или, по крайней мере, недостаточно, чтобы иметь большое значение? Также есть ли какая-либо другая форма аудиофайла, которая может быть сжата дальше, чем MP3, или MP3 - самая низкая форма сжатия, не повреждая файл навсегда? Постскриптум Спасибо за твою помощь! –

+0

Недостаточно быть значительным. Основная часть данных в файле MP3 уже закодирована Хаффманом. – duskwuff

+0

Я сжал Amarok.mp3 (альбом, который является одной, 60-минутной песней) с xz, который сжимается сильнее bz2, но результат был только сбережением 0,5%. Если бы вы могли сжать уже сжатый файл и быть продуктивным каждый раз, в конечном итоге вы сжимаете все до нуля. Но если вы начинаете с несжатого wav-файла, это должно сжать с xz довольно хорошо - возможно, меньше, чем встроенное сжатие mp3. – dstromberg

Смежные вопросы