Достижение того же сжатия PDF, что и для преобразования imagemagick с использованием ghostscript - PullRequest
0 голосов
/ 16 мая 2019

Есть ли способ добиться такого же сжатия, как (отличная степень сжатия и качество, но оно медленное и может сломать pdfs):

pdfimages -tiff $1 pdf_images
convert pdf_images-* -alpha off -monochrome -compress Group4 -density 250 ${1%.pdf}.compressed.pdf
rm pdf_images-*

Используя вместо этого только ghostscript?

Пробовалигра с dPDFSETTINGS, dGrayImageDownsampleType, sColorConversionStrategy, но в результате обычно получалось меньше или больше по размеру.

PDF состоит из отсканированных страниц (одно изображение на страницу)

Iобычно используйте что-то вроде следующего с GS (все еще чего-то не хватает, потому что изображения не конвертируются ... это по замыслу?):

gs \
    -q \
    -dNOPAUSE \
    -dBATCH \
    -dSAFER \
    -sDEVICE=pdfwrite \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=false \
    -dSubsetFonts=false \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=250 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=250 \
    -sProcessColorModel=DeviceGray \
    -dProcessColorModel=/DeviceGray \
    -sColorConversionStrategy=/Mono \
    -dOverrideICC \
    -sOutputFile=output.pdf \
    input.pdf

Случайный образец PDF от Google: https://www.2ndcollege.com/colleges/gcet/btech/sem5/ic/socio/notes/unit1.pdf

Оригинал: 5,6 МБ

GS: 1,4 МБ (не моно)

ghostscript output ghostscript output zoom

PDFImages + ImageMagick: 1,4 МБ (преобразуются только изображения)

imagemagick output imagemagick output zoom

1 Ответ

2 голосов
/ 18 мая 2019

Добавление в качестве ответа, потому что это слишком долго для комментария.

Я думаю, что артефакты, на которые вы ссылаетесь, вызваны квантованием JPEG.Исходное изображение было распаковано, уменьшено до более низкого разрешения, а затем повторно сжато.Поскольку вы не выбрали какой-либо другой метод сжатия, используется значение по умолчанию для PDFSETTINGS / screen: JPEG для серого и цветного изображений и CCITT Fax для моно изображений.

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

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

Учитывая, что это отсканированные страницы, нет смысла устанавливать какие-либо параметры, связанные со шрифтами (если только невидимые шрифты не имеютбыло добавлено).

Вы установили ProcessColorModel дважды, один раз в качестве имени и один раз в виде строки.На самом деле, если вы используете ColorConversionStrategy, вы не должны устанавливать его вообще, и если вы не используете ColorConversionStrategy, то это не будет иметь никакого эффекта, поэтому вы можете просто отбросить эти два.

Тамне является ColorConversionStratefy из / Mono, и пытается установить, что вызывает ошибки для меня.Похоже, что в текущем выпуске была обнаружена ошибка с ColorConversionStrategy.Если вы установите Grey, вы получите RGB.Чтобы получить Грей, вам нужно запросить CMYK.Очевидно, что это было исправлено, но в то же время все места «по одному».sRGB-> CMYK, CMYK-> Серый и Серый-> RGB.LeaveColorUnchanged не изменяется.

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

Теперь, как я уже сказал, вы не можете получить pdfwrite Ghostscript для получения монохромного вывода, только в оттенках серого.,Я полагаю, что уменьшение данных изображения в 8–24 раза приводит к увеличению прибыли.Так что, откровенно говоря, вы не сможете получить тот же размер вывода, используя pdfwrite, не сильно уменьшая частоту дискретизации изображений.И если вы сделаете это, то качество пострадает.

Эта командная строка:

\ ghostpdl \ debugbin \ gswin32c -dBATCH -dNOPAUSE -sDEVICE = pdfwrite -sOutputFile = out.pdf-sColorConversionStrategy = CMYK -dPDFSETTINGS = / screen -dGrayImageDownsampleType = / Bicubic -dGrayImageFilter = / FlateEncode -dAutoFilterGrayImages = false unit1.pdf

приводит к очень низкому выходному файлу серого цвета, размер которого получается очень низким, но в результате получается очень низкий размер - 2.1 МБ.размытый вывод, я не думаю, что вам понравится вообще.Вы можете изменить величину понижающей дискретизации, но это, конечно, приведет к увеличению выходного файла.Вы можете оставить фильтр сжатия без изменений (DCTEncode == JPEG), но это даст вам артефакты сжатия.

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

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

...