Сжимать похожие изображения без потерь?

Сжимать похожие изображения без потерь?

Мне нужно уменьшить размер моей библиотеки фотографий, поэтому я, естественно, хочу сжать их. Многие из них не совсем идентичны, но все же очень похожи (последовательные снимки одной и той же сцены). Есть ли какой-либо алгоритм сжатия, который использует этот факт для эффективного сжатия этих изображений? 7zip (LZMA) бесполезен.

решение1

Вы можете попробоватьПак 8(fp8_v2.zip). Я только что попробовал это сам на 1440 похожих изображениях PNG, а затем еще раз на 111 похожих изображениях JPG. Вот результаты.

  • 1440 файлов PNG, 28 631 615 байт => 2 058 653 байт в сжатом виде
  • 111 файлов JPG, 15 003 820 байт => 489 096 байт в сжатом виде

Сжатие PNG-файлов заняло около 8 минут и 550 МБ памяти при использовании:

fp8_v2.exe -7 images *.png

Сжатие файлов JPG заняло около 5 минут и 125 МБ памяти при использовании:

fp8_v2.exe -5 images image12*.jpg

Смотрите также:тест сжатия изображения jpg без потерь

решение2

Вот простое решение, которое не работает для фотографий, но может сработать, если у вас есть несколько изображений с большими попиксельно идентичными областями: сохраните изображения в распакованном формате, например BMP (не PNG или GIF), а затем заархивируйте их в TAR и сожмите с помощью хорошего компрессора, например XZ, например, в Linux с помощью чего-то вроде

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Вместо TAR и XZ можно использовать 7-Zip с опцией «сплошной архив», чтобы получить примерно ту же производительность. Таким образом я смог сжать 16 похожих скриншотов, каждый из которых занимал около 900 КБ при сохранении в виде отдельных файлов PNG, в архив размером 2 МБ. Преимущество этого решения в том, что оно использует распространенные форматы файлов, поэтому работает без установки нового программного обеспечения. (К сожалению, старые и даже более распространенные программы GZIP и BZIP2 не справились со своей задачей — возможно, потому, что размер блока BZIP2 нельзя настроить больше 900 КБ.)

решение3

Я бы предположил, что преобразование Берроуза-Уиллера с арифметическим кодером было бы идеальным для этого, учитывая достаточно большое окно. Что произойдет, если вы настроите BZIP2 на использование размера блока, равного небольшому количеству фотографий? Это будет медленнее и займет больше памяти, но степень сжатия должна резко возрасти. А вы уже пробовали LZMA с большими размерами блоков?

решение4

Не то, что я видел. Вероятно, наиболее близким вариантом было бы взять несколько похожих JPEG и объединить их в фильм MJPEG. Вы также можете использовать APNG или анимированные GIF для той же цели.

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

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

Связанный контент