Сжатие / оптимизация векторов в PDF - PullRequest
5 голосов
/ 06 января 2012

У меня есть PDF отсканированной книги, изображения в формате JBIG2 (ч / б). Я хотел бы преобразовать это в векторный PDF, что я могу легко сделать, извлекая изображения и преобразовывая их в инструкции векторной графики PDF с помощью potrace.

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

Проблема в том, что полученный PDF имеет гигантский размер. Даже при максимальном сжатии потоков gz он составляет 300 КБ на страницу (исходные изображения JBIG2 составляли 30 КБ на страницу).

Можно ли как-нибудь оптимизировать векторную графику, чтобы размер файлов был намного меньше?

Вот сегмент инструкций векторного рисования:

0.100000 0.000000 0.000000 0.100000 0.000000 0.000000 cm
0 g
8277 29404 m
8263 29390 8270 29370 8289 29370 c
8335 29370 8340 29361 8340 29284 c
8340 29220 8338 29210 8323 29210 c
8194 29207 8141 29208 8132 29214 c
8125 29218 8120 29248 8120 29289 c
8120 29356 8121 29358 8150 29370 c
8201 29391 8184 29400 8095 29400 c
8004 29400 7986 29388 8033 29357 c
8056 29342 8057 29338 8057 29180 c
8058 29018 l
8029 29008 l
8012 29002 8001 28993 8003 28986 c
h
f

Я бы подумал, что числа можно сжать очень легко, но, очевидно, нет. Одна страница содержит 800 КБ несжатого (как указано выше) и 300 КБ сжатого gz. Я бы подумал, что степень сжатия могла бы быть намного лучше, учитывая, что в инструкциях все числа находятся в одинаковых диапазонах.

1 Ответ

1 голос
/ 06 января 2012

Боюсь, с этим ничего не поделаешь.

Конечно, вы можете попробовать использовать сжатие LZW в потоках страниц PDF (вместо Deflate), но это, вероятно, не будет иметь большого значения.

Другие предложения:

  • Сгладьте исходное изображение как можно больше / удалите как можно больше деталей. Это может сделать меньше кривых (то есть меньше данных) во время преобразования.
  • Попробуйте оптимизировать значения в потоке страниц PDF. Например, вы можете попытаться использовать сложные комбинации операторов масштабирования / перевода и изменения данных. Цель здесь - уменьшить длину операндов.

Например, вы можете попытаться разделить все операнды (используя целое число, а не деление с плавающей запятой), скажем, на 100 и добавить масштабирование перед первым оператором. Этот подход, скорее всего, ухудшает визуальное качество.

И, конечно, если вы собираетесь делать это только с несколькими файлами, я бы сказал, что это не стоит времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...