Вопрос или проблема
У меня есть page_1.pnm, …, page_6.pnm, которые представляют 6 страниц отсканированного документа, все в сером PNM, созданные с помощью scanimage и вручную обработанные в GIMP. Команда
convert $(for i in 1 2 3 4 5 6; do echo page_$i.pnm; done | xargs echo) -compress Zip -quality 100 document.hi-res.pdf
создала PDF файл размером 15620554 байта, тогда как
tar cvf document.hi-res.tar $(for i in $(seq 1 6); do echo page_$i.pnm; done| xargs echo)
xz -9 -e -vv document.hi-res.tar
создал tar.xz файл размером 12385312 байт, что составляет около 72% от размера PDF. Это означает, что в документе есть достаточно избыточной информации, которую PDF+Zip не удаляет или не может удалить. Возникает вопрос: существует ли формат документа (для отсканированного материала), для которого Windows имеет встроенный просмотрщик и Debian Linux имеет хотя бы стандартный, свободно доступный просмотрщик, такой, что документы в этом формате обычно меньше, чем PDF, без потери информации? (Да, я пробовал TIFF, и он был больше, чем PDF. Я также создал документ Postscript с помощью convert и затем сжал его командой gzip --best
, но полученный файл .ps.gz был еще больше. Я не знаю, как создавать пригодные для использования DJVU документы из серых изображений без потерь. Я не знаю, как создавать XPS файлы на Debian (GhostXPS/GhostPDL, похоже, не имеет пакета.))
Кстати, есть ли более короткий и элегантный способ создать page_1.pnm page_2.pnm page_3.pnm page_4.pnm page_5.pnm file_6.pnm
, чем $(for i in $(seq 1 6); do echo page_$i.pnm; done | xargs echo)
?
PS. Мне не нужна сжатие с потерями; если я позволяю себе потерю информации, меня вполне устраивает convert $(for i in $(seq 1 6); do echo page_$i.pnm; done | xargs echo) -compress JPEG2000 -quality 40 document.JPEG2000.40.pdf
(замените 40 на свой выбор, пока ваш файл не станет достаточно мал для вашего приложения).
С данными ограничениями, которые вы указали, я думаю, вряд ли вы найдете что-то подходящее.
Существует несколько методов сжатия изображений без потерь, например:
- Кодирование длин серий (RLE)
- LZW
- DEFLATE
Если вы заглянете в спецификацию PDF, вы заметите, что она поддерживает именно эти методы. Вы упомянули сжатие ZIP, но для convert
это всего лишь псевдоним для Flate.
Хотя существуют более эффективные методы сжатия данных общего назначения такие как LZMA (xz), ни один из них не вошел в обычные форматы документов (по крайней мере, насколько мне известно).
Причина этого, вероятно, проста: Люди, которым абсолютно нужно сжатие без потерь, не заботятся о размере. Люди, которые заботятся о размере, готовы пойти на уступки.
Существуют, однако, многие методы сжатия изображений с потерями, которые имеют “перцептуально без потерь” режимы работы. Это означает, что после декомпрессии битовый поток не будет идеально совпадать с входным, но вам будет трудно заметить разницу невооруженным глазом. В наши дни WebP довольно популярен. Apple предпочитает HEIF. Вы получите каталог файлов изображений, а не один файл, однако. С последней версией libtiff, вы можете поместить WebP в TIFF, но это экспериментальная функция и не является частью официального стандарта формата файла.
Насколько мне известно, DjVu тоже использует сжатие с потерями. Если вы все еще хотите попробовать его, вы можете сначала конвертировать в PDF без потерь, а затем использовать pdf2djvu
.
.
Ответ или решение
Для выполнения задачи по нахождению более эффективного формата для сжатия серых сканированных изображений, чем PDF с использованием Zip компрессии, необходимо разобраться в доступных вариантах форматов и технологии сжатия данных. Вопрос заключается в поиске формата, поддерживаемого стандартными средствами на Windows и Debian Linux, который обеспечит меньший объем файла при сохранении всей информации. Рассмотрим теорию, примеры и применение (план TEA) различных подходов к этой проблеме.
Теория
В основе любой задачи сжатия лежат методы, которые позволяют уменьшить количество данных без потери информации (lossless) или с допустимой потерей (lossy). Наиболее распространенные методы потерь включают такие алгоритмы как LZW, DEFLATE, и другие. С точки зрения PDF, применяемая Zip компрессия является эквивалентом использования алгоритма Flate, который в свою очередь базируется на DEFLATE.
Существует несколько форматов, которые заслуживают внимания при решении данной задачи:
- TIFF с улучшенной компрессией: TIFF может быть использован в сочетании с ALWZ или LZMA сжатиями для достижения лучшего результата.
- DjVu: хотя в своем обыденном применении рассматривается как формат с потерей данных, DjVu может быть настроен для работы в lossless режиме.
- XPS: хотя этот формат менее популярен вне экосистемы Windows, он имеет хорошие показатели сжатия для черно-белых и серых изображений.
Примеры
Проблема состоит в обнаружении лишней информации, которую PDF+Zip не может удалить, однако ваш пример с tar.xz показал, что использование LZMA алгоритмов может давать лучший результат. Tar по своей природе действует как архиватор коллекции файлов, а xz – это компрессор, который реализует алгоритм LZMA, что демонстрирует возможности более эффективного сжатия по сравнению с традиционным Zip алгоритмом PDF.
Применение
-
Использование TIFF с Optimiz’ацией: Оптимизируйте TIFF файлы с помощью Lossless JPEG или PackBits, если поддерживается, чтобы уменьшить их размер перед упаковкой в tar или иной архиватор. Это даст вам возможность иметь компрессию уровня xz в архиве, используемом как контейнер.
-
Рассмотрите XPS: Хотя этот формат провоцирует трудности с созданием во время работы на Debian, использование его в Windows (связываясь с коллегами, работающими на этой платформе) может быть подходящим решением.
-
Исследуйте DjVu: Конвертация из lossless PDF с использованием pdf2djvu может позволить использовать преимущества DjVu, если его настроить на максимальные рейтинговые показатели качества.
-
Автоматизация линейной нумерации: Вместо использования сложных циклов bash, вы можете создать список имен файлов с помощью одного простого выражения:
echo page_{1..6}.pnm
. Это выразит все имена файлов одной строкой с использованием встроенного расширения последовательностей в bash.
Заключение
В вашей ситуации, невозможно предложить легкое решение, исходя из требований использования бесплатных и встроенных средств Debian, которые бы обеспечивали удобный просмотр и сжатие без потерь лучше, чем доступные сейчас. Тем не менее, использование передовых алгоритмов сжатия, таких как LZMA в виде tar.xz архива, применение мощных настроек для TIFF или потенциальная игра с форматами как XPS или DjVu может дать результаты, сопоставимые с поставленной задачей.
Таким образом, подход к задаче многогранен, и успешное сжатие будет зависеть от множества факторов: от понимания специфических возможностей каждого формата до интеграции этих решений в вашу рабочую среду.