Ghostscript: конвертировать PDF с изображением из RGB в серый

Я использовал следующий код для преобразования pdf с изображением rgb:

gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \
   -dEmbedAllFonts=true \
   -dPDFSETTINGS="/prepress" \
   \
   -sColorConversionStrategy=Gray \
   \
   -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode \
   -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode \
   -dMonoImageFilter=/FlateEncode \
   \
   -dDownsampleColorImages=false \
   -dDownsampleGrayImages=false \
   -dDownsampleMonoImages=false \
   \
   \
   -sOutputFile=$4 \
   -f "$1"

Использование этого кода не меняет цветовой режим этого изображения.

Если преобразовать включенное изображение в серый цвет с помощью gs (это PDF-файл, измененный с помощью inkscape и сохраненный как rgb) перед созданием PDF-файла с использованием латекса, он работает.

Используемая GS-версия — 9.26. Ссылки на используемые данные:

  • включенное изображение: pdf
  • с созданным латексом: pdf
  • в серый преобразованный PDF-файл, что создает проблему: pdf

person Joe9    schedule 12.07.2019    source источник
comment
Поместите файл PDF в общедоступное место (например, DropBox) и дайте ссылку здесь. Вы также должны указать версию Ghostscript, которую вы используете. На вашем месте я бы удалил hte -dPDFSETTINGS и просто применил нужные элементы управления. PDFSETTINGS одновременно изменяет более 60 различных параметров конфигурации, при отладке, по крайней мере, лучше изменить как можно меньше вещей.   -  person KenS    schedule 12.07.2019
comment
Спасибо за подсказки. Я отредактировал Вопросы.   -  person Joe9    schedule 12.07.2019


Ответы (1)


Глядя на файл «серого конвертированного pdf», я вижу, что содержимое полностью находится в DeviceGray. Так почему вы думаете, что это не так? Как вы определяете «цветовой режим»?

Файл PDF содержит прозрачность (бессмысленно, но это Каир для вас) и имеет режим наложения DeviceRGB. Это не то, что pdfwrite Ghostscript может изменить, если он изменит режим наложения, то с выходом могут произойти плохие вещи.

person KenS    schedule 12.07.2019
comment
Я использовал inkcov-device gs: gs -q -o - -sDEVICE=inkcov page-24-gray-all.pdf, который показывает: 0,04940 0,04940 0,04940 0,04277 CMYK OK - person Joe9; 12.07.2019
comment
Насчёт прозрачности я немного запутался. Изображение не имеет прозрачности (проверено с помощью Acrobat 8), созданный с помощью латекса pdf имеет прозрачность на этом изображении. Как я могу проверить с помощью gs? (в моей установке нет файла pdf_info.ps) Я вообще хотел бы избежать прозрачности, потому что мне нужны файлы допечатной подготовки. - person Joe9; 13.07.2019
comment
inkcov не сообщает вам, каким было исходное цветовое пространство. Что он сообщает вам при печати на устройстве CMYK, сколько каждого рабочего цвета используется. Это означает, что значения серого преобразуются в цветовое пространство CIE, а затем в пространство CMYK. В зависимости от используемых профилей ICC это может и обычно приводит к чему-то другому, кроме C=M=Y=0 и серого%K. Боюсь, вы не можете надежно использовать его, чтобы сказать вам что-либо о цветовом пространстве исходного файла. - person KenS; 13.07.2019
comment
Файл Verbunddichte_3-inkscape.pdf содержит словарь ExtGState со значениями CA и ca (Constant alpha). Объект страницы дополнительно содержит словарь группы прозрачности с пространством смешивания DeviceRGB (CS). Как я уже сказал, прозрачность не имеет фактического эффекта, поскольку значения CA равны 1 (100%, т.е. непрозрачны), но, тем не менее, они являются директивами прозрачности. Устройство pdfwrite не может знать в определении страницы, что прозрачность не имеет смысла, поэтому оно должно включать ее в свой собственный вывод. - person KenS; 13.07.2019
comment
Если pdfinfo.ps не был включен в используемый вами дистрибутив, вы должны пожаловаться сопровождающему пакета. Вы можете получить копию, загрузив исходный код из исходного архива на веб-сайте Ghostscript или клонировав репозиторий Git. Обратите внимание, что прозрачность в этом файле не имеет никакого эффекта, но в момент обнаружения первой операции (при открытии страницы) устройство вывода не может знать об этом, поэтому оно должно включать группа прозрачности уровня страницы. - person KenS; 13.07.2019
comment
Вы правы, inkconv сообщает только значения, напечатанные на устройстве CMYK. Но если я получаю gs: gs -q -o - -sDEVICE=inkcov page-24-gray-all.pdf, который показывает: 0,04940 0,04940 0,04940 0,04277 CMYK OK, я думаю, что это не может быть DeviceGray. Какой инструмент (linux) вы используете для проверки исходного цветового пространства? - person Joe9; 25.07.2019
comment
Меня все еще смущает прозрачность, потому что Acrobat 8 ​​не говорил о прозрачности в файле. Как проверить прозрачность? Я не могу конвертировать файлы с прозрачностью с помощью gs, верно? - person Joe9; 25.07.2019
comment
Я проверяю прозрачность так же, как я проверяю исходное цветовое пространство, я читаю фактическое содержимое PDF-файла. Я могу заверить вас, что файл PDF содержит прозрачность, хотя, как я уже сказал, прозрачность не имеет никакого эффекта (я говорил об этом несколько раз). Я не знаю, что вы имеете в виду, когда обсуждаете устройство inkcov, оно ничего не говорит вам ничего об исходном цветовом пространстве. Все, что он говорит вам, это то, какие цвета будут на устройстве CMYK. - person KenS; 25.07.2019
comment
Если преобразование цвета из серого в CIE XYZ в CMYK не приводит к чистому K (что совершенно не обязательно делать), то вы увидите «насыщенный черный». Это полностью зависит от профиля Grey ICC, который вы используете. Вы очень свободно используете термин «конвертировать». Ghostscript и устройство pdfwrite вполне способны обработать файл PDF и создать новый. Ваш первоначальный вопрос заключался в том, почему ваше «изображение» «RGB» не изменилось на DeviceGray, на что ответ «потому что оно уже было серым, а не RGB». Если у вас есть другой вопрос, пожалуйста, начните новый вопрос. - person KenS; 25.07.2019